20

私は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何が問題なのかを推測するという点では、これ以上のことはできません。

4

8 に答える 8

11

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 
于 2012-12-05T17:54:21.673 に答える
2

NoSuchElementException使用可能なトークンがなくなるとスローされます。これは、使用可能な整数があるかどうかnextInt()を確認せずに呼び出すことによって発生します。それを防ぐために、使用可能なトークンが他にもあるかどうかを確認するために使用することを検討してください。hasNextInt()

于 2012-12-05T18:04:24.217 に答える
2

hasNextInt()変数に値を代入する前に使用する必要があります。

于 2012-12-05T17:53:24.733 に答える
1

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

于 2019-01-13T08:42:41.313 に答える
1

可能であれば、今日、それぞれ Scanner のインスタンスを使用する関数が複数あることに気づき、この問題を解決しました。したがって、基本的には、インスタンスを 1 つだけ開き、最後に閉じるようにリファクタリングしてみてください。これでうまくいくはずです。

于 2020-10-07T23:17:09.487 に答える
0

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

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

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