web-dev-qa-db-ja.com

Java.Util.ScannerでのNoSuchElementException

私は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:

これはおそらくJava.utilScannerクラスと互換性のないソースコードの何かが原因であることを理解していますが、問題の原因を推測する上でこれ以上のことはできません。です。

15
adaam

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 
5
user813853

NoSuchElementExceptionがスローされます 使用可能なトークンがもうない場合 。これは、チェックせずにnextInt()を呼び出すことで発生します 利用可能な整数がある場合 。発生しないようにするには、hasNextInt()を使用して、トークンがさらに使用可能かどうかを確認することを検討してください。

3
Terry Li

変数に値を割り当てる前に、hasNextInt()を使用する必要があります。

3
Addict

Integer#nextInt throws NoSuchElementException-入力が使い果たされた場合

次の行にInteger#hasNextLineがあるかどうかを確認する必要があります

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

最後にinput.close()を追加する必要があります...

1