11

Scannerを使用してキーボードからintを取得しようとしていますが、次のエラーが発生します。

Exception in thread "main" java.util.NoSuchElementException
    at java.util.Scanner.throwFor(Scanner.java:907)
    at java.util.Scanner.next(Scanner.java:1530)
    at java.util.Scanner.nextInt(Scanner.java:2160)
    at java.util.Scanner.nextInt(Scanner.java:2119)
    at TableReader.mainMenu(TableReader.java:122)
    at TableReader.main(TableReader.java:76)

これは私が持っているものです。それは私のプログラムの他の部分から独立しています、なぜこれが機能しないのか分かりません。それが役立つ場合は、whileループで呼び出されているメソッドで宣言されます。

    // scan for selection
    Scanner s = new Scanner(System.in);
    int choice = s.nextInt();           // error occurs at this line
    s.close();

デバッガーを使用して、エラーを次のように絞り込みました。

致命的なエラーがJavaランタイム環境によって検出されました:pc = 0xb6bdc8a8、pid = 5587、tid = 1828186944のSIGSEGV(0xb)

JREバージョン:7.0_07-b30 Java VM:OpenJDKサーバーVM(23.2-b09混合モードlinux-x86)問題のあるフレーム:V [libjvm.so + 0x4258a8] java_lang_String :: utf8_length(oopDesc *)+ 0x58

コアダンプの書き込みに失敗しました。コアダンプが無効になっています。コアダンプを有効にするには、Javaを再起動する前に「ulimit-cunlimited」を試してください

4

1 に答える 1

22

hasNextXXXX()クラスのメソッドを使用して、Scanner読み取る準備ができている整数があることを確認する必要があります。

問題はnextInt()、オブジェクトが指すストリームから次の整数を読み取るように呼び出されることです。読み取るScanner整数がない場合(つまり、入力が使い果たされた場合は、次の整数が表示されますNoSuchElementException) 。

JavaDocsから、nextInt()メソッドは次の条件下でこれらの例外をスローします。

  • InputMismatchException-次のトークンが整数正規表現と一致しない場合、または範囲外の場合
  • NoSuchElementException-入力が使い果たされた場合
  • IllegalStateException-このスキャナーが閉じている場合

hasNextInt()次の方法を使用して、これを簡単に修正できます。

Scanner s = new Scanner(System.in);
int choice = 0;

if(s.hasNextInt()) 
{
   choice = s.nextInt();
}

s.close();
于 2012-10-11T04:05:31.503 に答える