gpt4 book ai didi

java - 弄清楚类 Scanner 及其异常如何在 Java 中协同工作

转载 作者:行者123 更新时间:2023-11-30 04:59:30 26 4
gpt4 key购买 nike

我正在查看How to Program in Java, 7e中的示例。用户手动将数据输入到类 AccountRecord record

的对象中
AccountRecord record = new AccountRecord();
Scanner input = new Scanner( System.in );
while ( input.hasNext() ) // loop until end-of-file indicator
{
try // output values to file
{
// retrieve data to be output
record.setAccount( input.nextInt() ); // read account number
record.setFirstName( input.next() ); // read first name
record.setLastName( input.next() ); // read last name
record.setBalance( input.nextDouble() ); // read balance

.............................................................

catch ( NoSuchElementException elementException )
{
System.err.println( "Invalid input. Please try again." );
input.nextLine(); // discard input so user can try again
} // end catch
}

我很难弄清楚catch (NoSuchElementException elementException)是如何工作的。根据 Java 文档,NoSuchElementException 是

Thrown by the nextElement method of an Enumeration to indicate that there are no more elements in the enumeration.

那么,为什么如果预期输入的内容与实际输入的内容类型不匹配,它也会抛出异常,例如对于 record.setAccount(input.nextInt()),用户输入一些文本字符串?

谢谢!

最佳答案

对于类型不匹配问题,您应该捕获 InputMismatchException 。由于它继承自 NoSuchElementException,您将通过捕获 NoSuchElementException 来捕获它(因此代码将捕获它并按预期工作) 。不过,对我来说,这是一种奇怪的继承关系……当然不代表 is-a 关系。

如果您确实想区分这两种情况,请在NoSuchElementException之前捕获InputMismatchException

关于java - 弄清楚类 Scanner 及其异常如何在 Java 中协同工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7391440/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com