NoSuchElementException与Java.Util.Scanner

我对Java非常陌生,但是正在通过Java:How to program(第9版)这本书,并且已经达到了一个例子,在这个例子中,我终于明白了问题所在。

以下是教科书中源代码示例的(略)增强版本:

import java.util.Scanner; public class Addition { public static void main(String[] args) { // creates a scanner to obtain input from a command window Scanner input = new Scanner(System.in); int number1; // first number to add int number2; // second number to add int sum; // sum of 1 & 2 System.out.print("Enter First Integer: "); // prompt number1 = input.nextInt(); // reads first number inputted by user System.out.print("Enter Second Integer: "); // prompt 2 number2 = input.nextInt(); // reads second number from user sum = number1 + number2; // addition takes place, then stores the total of the two numbers in sum System.out.printf( "Sum is %d\n", sum ); // displays the sum on screen } // end method main } // end class Addition 

我得到了“NoSuchElementException”错误:

 Exception in thread "main" java.util.NoSuchElementException at java.util.Scanner.throwFor(Scanner.java:838) at java.util.Scanner.next(Scanner.java:1461) at java.util.Scanner.nextInt(Scanner.java:2091) at java.util.Scanner.nextInt(Scanner.java:2050) at Addition.main(Addition.java:16) Enter First Integer: 

据我所知,这可能是由于源代码中与java.utilScanner类不兼容的东西,但是在推断问题的原因方面,我实在无法做到这一点。

NoSuchElementException 由枚举的nextElement方法抛出,指示枚举中没有更多的元素。

http://docs.oracle.com/javase/7/docs/api/java/util/NoSuchElementException.html

这个怎么样 :

 if(input.hasNextInt() ) number1 = input.nextInt(); // if there is another number else number1 = 0; // nothing added in the input 

在将值赋给variables之前,应该使用hasNextInt()

如果没有更多的标记可用,则抛出NoSuchElementException 。 这是由调用nextInt()而不检查是否有任何整数可用 。 为了防止它发生,你可以考虑使用hasNextInt()来检查是否有更多的令牌可用。

Integer#nextInt抛出NoSuchElementException – 如果input已耗尽

你应该检查是否有下一行Integer#hasNextLine

 if(sc.hasNextLine()){ number1=sc.nextInt(); }