Ошибка сканера с 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 Runtime Environment: SIGSEGV (0xb) при pc = 0xb6bdc8a8, pid = 5587, tid = 1828186944

Версия JRE: 7.0_07-b30 Java VM: OpenJDK Server VM (23.2-b09 смешанный режим linux-x86) Проблемный фрейм: V [libjvm.so + 0x4258a8] java_lang_String :: utf8_length (oopDesc ​​*) + 0x58

Не удалось записать основной дамп. Сброс ядра отключен. Чтобы включить демпинг ядра, попробуйте «ulimit -c unlimited» перед повторным запуском Java

Вы должны использовать методы hasNextXXXX() из classа Scanner чтобы убедиться, что существует целое число, готовое для чтения.

Проблема в том, что вы вызваны nextInt() который читает следующее целое число из streamа, на который указывает объект Scanner , если для чтения нет целого числа (т. NoSuchElementException Если вход исчерпан, то вы увидите, что NoSuchElementException )

Из JavaDocs метод nextInt() будет nextInt() эти исключения в следующих условиях:

  • InputMismatchException – если следующий токен не соответствует регулярному выражению Integer или находится вне допустимого диапазона
  • NoSuchElementException – если вход исчерпан
  • IllegalStateException – если этот сканер закрыт

Вы можете легко исправить это с помощью hasNextInt() :

 Scanner s = new Scanner(System.in); int choice = 0; if(s.hasNextInt()) { choice = s.nextInt(); } s.close(); 
  • Java, читающая несколько ints из одной строки
  • В чем разница между методами next () и nextLine () из classа Scanner?
  • Ввод Java String Scanner не дожидается информации, перемещается непосредственно в следующий оператор. Как дождаться информации?
  • Сканер против BufferedReader
  • Почему hasNextLine () никогда не заканчивается?
  • Невозможно использовать Scanner.nextInt () и Scanner.nextLine () вместе
  • Использование scanner.nextLine ()
  • hasNext () - когда он блокируется и почему?
  • Прочтите .txt-файл в 2D-массив
  • Чтение CSV со сканером ()
  • Почему я получаю InputMismatchException?
  • Давайте будем гением компьютера.