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
Scanner
クラスのhasNextXXXX()
メソッドを使用して、読み取る準備ができている整数があることを確認する必要があります。
問題は、Scanner
オブジェクトが指すストリームから次の整数を読み取るnextInt()
と呼ばれることです。読み取る整数がない場合(つまり、入力が使い果たされた場合)、 NoSuchElementException
)が表示されます
JavaDocsから、nextInt()
メソッドは次の条件下でこれらの例外をスローします。
これは、hasNextInt()
メソッドを使用して簡単に修正できます。
Scanner s = new Scanner(System.in);
int choice = 0;
if(s.hasNextInt())
{
choice = s.nextInt();
}
s.close();