我是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
类不兼容,但在推断内容方面我真的无法做到这一点。问题是。
答案 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实例的功能来解决此问题。因此,基本上,请尝试进行重构,以便仅打开一个实例,最后关闭该实例-应该可以。