NoSuchElementException с Java.Util.Scanner
Я очень новичок в 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:
Я понимаю, что это, вероятно, связано с чем-то в исходном коде, который несовместим с классом Scanner
от java.util
, но я действительно не могу получить дальше этого с точки зрения вывода проблемы.
Ответы
Ответ 1
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
Ответ 2
Вы должны использовать hasNextInt()
перед назначением значения переменной.
Ответ 3
NoSuchElementException
будет выбрано если не доступно больше токенов. Это вызвано вызовом nextInt()
без проверки если доступно целое число. Чтобы этого не произошло, вы можете использовать hasNextInt()
, чтобы проверить, доступны ли еще токены.
Ответ 4
Integer#nextInt
throws NoSuchElementException
- если вход исчерпан
Вы должны проверить, есть ли следующая строка с Integer#hasNextLine
if(sc.hasNextLine()){
number1=sc.nextInt();
}
Ответ 5
Вы должны добавить input.close() в конце...