try/catch with InputMismatchException creates infinite loop [duplicate]
try / catch with InputMismatchException создает бесконечный цикл
Итак, я создаю программу, которая принимает целые числа из пользовательского ввода. У меня есть то, что кажется очень простым блоком try / catch, который, если пользователь не вводит int, должен повторять блок, пока он не введет. Вот соответствующая часть кода:
Если я ввожу 0 для второго целого числа, то try / catch делает именно то, что должен, и заставляет меня ввести его снова. Но, если у меня возникает исключение InputMismatchException, например, при вводе 5.5 для одного из чисел, оно просто показывает мое сообщение об ошибке в бесконечном цикле. Почему это происходит, и что я могу с этим поделать? (Кстати, я пытался явно ввести исключение InputMismatchException в качестве аргумента для catch, но это не решило проблему.
Переведено автоматически
Ответ 1
Вам нужно вызвать next(); при получении ошибки. Также рекомендуется использовать hasNextInt()
catch (Exception e) { System.out.println("Error!"); input.next();// Move to next other wise exception }
Перед чтением целочисленного значения вам нужно убедиться, что оно есть в scanner. И вам не понадобится подобная обработка исключений.
Когда сканер выдает исключение InputMismatchException, сканер не передает токен, вызвавший исключение, так что его можно извлечь или пропустить каким-либо другим методом.
Ответ 2
Вы также можете попробовать следующее
do { try { System.out.println("Enter first num: "); n1 = Integer.parseInt(input.next());
System.out.println("Enter second num: "); n2 = Integer.parseInt(input.next());
Чтобы следовать ответу debobroto das, вы также можете поставить после
input.reset(); input.next();
У меня была такая же проблема, и когда я попробовал это. Это полностью исправило ее.
Ответ 4
другой вариант - определить Scanner input = новый сканер (System.in); внутри блока try это будет создавать новый объект каждый раз, когда вам нужно повторно вводить значения.