20

我对 Java 很陌生,但正在阅读 Java:如何编程(第 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:

我知道这可能是由于源代码中的某些内容Scannerjava.util.

4

8 回答 8

11

NoSuchElementException 由 Enumeration 的方法抛出,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 
于 2012-12-05T17:54:21.673 回答
2

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

于 2012-12-05T17:53:24.733 回答
2

NoSuchElementException如果没有更多的令牌可用,将被抛出。这是由于调用nextInt()时没有检查是否有任何可用的整数。为了防止这种情况发生,您可以考虑使用hasNextInt()来检查是否有更多可用的令牌。

于 2012-12-05T18:04:24.217 回答
2

当我输入诸如 5.3、23.8 之类的数字时,我在 nextDouble() 中遇到了这个错误 ...扫描仪 = 新扫描仪(System.in).useLocale(Locale.US);

于 2021-03-09T09:54:50.297 回答
1

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

于 2019-01-13T08:42:41.313 回答
1

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

于 2020-04-01T08:18:37.117 回答
1

如果可以的话,我今天解决了这个问题,因为我意识到我有多个函数,每个函数都使用了一个 Scanner 的实例。所以基本上,尝试重构,以便您只打开一个实例,然后最终关闭- 这应该可行。

于 2020-10-07T23:17:09.487 回答
0

Integer#nextIntthrows NoSuchElementException- 如果输入用尽

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

if(sc.hasNextLine()){
    number1=sc.nextInt();
}
于 2012-12-05T17:57:26.267 回答