NoSuchElementException

NoSuchElementException

我正在看“如何在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

10-08 18:12