Бесконечные сообщения InputMismatchException при добавлении переменных в List в бесконечном цикле
Всем привет. Осваиваю обработку исключений в java. Есть ArrayList, который в бесконечном цикле принимает на вход от пользователя числа, которые добавляются в ArrayList. Хочу поймать исключение, чтобы при вводе не int значений цикл не прекращался, а просто выводилось сообщение "Only ints!", после чего пользователь мог продолжить вводить числа.
Но по факту когда вводишь не int, начинается бесконечный вывод сообщения. Думал, continue эту проблему исправит, но почему-то не работает. Подскажите, почему так и как это исправить?
public class Exceptions3 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
List<Integer> list = new ArrayList<>();
while (true){
try{
list.add(scanner.nextInt());
}
catch (InputMismatchException e){
System.out.println("Only ints!");
continue;
}
}
}
}
Ответы (1 шт):
Когда сканер при попытке выполнить nextInt() обнаруживает, что во входном потоке не число, он генерирует исключение и не счситывает это не-число из входного потока. В результате при следующей попытке считать число сканер будет повторно пытаться считать то же самое не-число и снова сгенерирует исключение. Чтобы сканер наплевал на то, чего он не может распознать, и перешел к следующему элементу входного потока, нужно при обработке исключения (в блоке catch) дополнительно поставить scaner.next();.
А continue в вашем примере вообще ни на что не влияет. Оно просто передаёт управление на начало цикла, куда выполнение и так перейдет после завершения блока catch. continue надо использовать тогда, когда после него в теле цикла есть еще что-то, что надо пропустить.