Я пытаюсь написать метод getInt()
, который абстрагирует извлечение целого числа из консоли в остальную часть моей программы.
Внутри есть попытка использования ресурса - ресурсабыть сканером;с блоком перехвата для неизбежного InputMismatchException
.
Он фиксирует действительные входные данные, отлично;и перехватывает ложные входы.
Однако после - рекурсивно - попытки снова захватить ввод, мой сканер мгновенно выдает NoSuchElementException
, что, очевидно, связано с последней ошибкой несоответствия.
Нужно ли что-то очищать во втором сканере, возможно, слева от первого?
private static int getInt(String name) {
try (Scanner scanner = new Scanner(System.in)) {
System.out.printf("Enter %s: ", name);
return scanner.nextInt();
} catch (InputMismatchException e) {
System.out.println("Invalid");
return getInt(name);
}
}
Я уже пытался создать экземпляр сканера из функции, например, так:
Scanner scanner = new Scanner(System.in);
getInt(scanner, name);
...
private static int getInt(Scanner scanner, String name) {
try {
System.out.printf("Enter %s: ", name);
return scanner.nextInt();
} catch (InputMismatchException e) {
System.out.println("Invalid");
return getInt(scanner, name);
}
}
Здесь я просто получаю ошибку переполнения стека, потому что ошибка рассогласования повторяется.