Scanner.nextInt () выбрасывает NoSuchElementException после InputMismatchException - PullRequest
0 голосов
/ 30 ноября 2018

Я пытаюсь написать метод 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);
    }
}

Здесь я просто получаю ошибку переполнения стека, потому что ошибка рассогласования повторяется.

...