我正在看“如何在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是由Enumeration的nextElement方法抛出,以指示
枚举中没有其他元素。
那么,如果在预期输入和实际输入的输入之间类型不匹配的情况下(例如对于
record.setAccount(input.nextInt())
用户输入一些文本字符串),为什么还会抛出异常?谢谢 !
最佳答案
对于类型不匹配问题,您应该捕获InputMismatchException
。由于它是从NoSuchElementException
继承的,因此您将通过捕获NoSuchElementException
来捕获它(因此,按原样的代码将捕获它并按预期工作)。对我来说,这是一个奇怪的继承关系。...当然,这并不代表is-a
关系。
如果您真的想区分这两种情况,请在InputMismatchException
之前接一个NoSuchElementException
。