web-dev-qa-db-ja.com

nextInt()でのスキャナーエラー

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

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

8
spatara

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

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

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

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

これは、hasNextInt()メソッドを使用して簡単に修正できます。

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

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

s.close();
16
Hunter McMillen