Java.Util.Scanner的NoSuchElementException

时间:2012-12-05 17:47:38

标签: java 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:

我理解这可能是因为源代码中的某些内容与Scanner中的java.util类不兼容,但在推断内容方面我真的无法做到这一点。问题是。

8 个答案:

答案 0 :(得分:5)

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 

答案 1 :(得分:3)

在为变量赋值之前,您应该使用hasNextInt()

答案 2 :(得分:3)

NoSuchElementException将被抛出if no more tokens are available。这是因为在不检查if there's any integer available的情况下调用nextInt()。为防止这种情况发生,您可以考虑使用hasNextInt()检查是否有更多令牌可用。

答案 3 :(得分:1)

Integer#nextInt抛出NoSuchElementException - 如果输入已用尽

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

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

答案 4 :(得分:1)

大多数错误发生在正在测试代码的0nline IDE的情况下。它的配置不正确,就好像您在其他任何IDE /记事本上运行相同的代码一样,它也可以正常工作,因为在线IDE的设计方式无法调整您格式的输入代码,因此您必须以在线IDE支持。

答案 5 :(得分:1)

我在使用 nextDouble() 时遇到了这个错误,当我输入诸如 5.3、23.8 之类的数字时……我认为这是来自我的电脑,具体取决于使用阿拉伯语的计算机设置(23,33 而不是 23.33),我用添加: Scanner 扫描仪 = new Scanner(System.in).useLocale(Locale.US);

答案 6 :(得分:0)

您必须在最后添加input.close()...

答案 7 :(得分:0)

如果可以的话,我今天意识到自己有多个使用Scanner实例的功能来解决此问题。因此,基本上,请尝试进行重构,以便仅打开一个实例,最后关闭该实例-应该可以。