Есть код
public static int printInt() {
Scanner print = new Scanner(System.in);
try {
return print.nextInt();
} catch (InputMismatchException e) {
System.out.println("Введено не число!\nВведите повторно:");
return printInt();
}
}
Когда введено не число, код из блока catch выполняется много раз, пока не заполнится стек и не возникнет ошибка переполнения стека.
Не могу понять, почему Scanner берет значение, которое консоль сама же вывела, и не даёт возможности ввести число.
У меня есть решение, но мне не нравится, что там используется ненужная переменная.
public static int printInt() {
Scanner print = new Scanner(System.in);
try {
return print.nextInt();
} catch (InputMismatchException e) {
System.out.println("Введено не число!\nВведите повторно:");
String t = print.nextLine(); // ненужная переменная
return printInt();
}
}
И подскажите решение, не использующее ненужные переменные.
printIntкаждый раз создаётся новый экземпляр сканера, который будет заново считывать содержимое потока ввода, а предыдущий неверный ввод будет считан в буфер сканера при предыдущем вызове. – Nowhere Man Mar 06 '24 at 09:33