Java Scanner генерирует исключение NoSuchElementException

Я изучаю Java, и поэтому я написал простую игру в догадки. Сейчас я пытаюсь улучшить его, добавив дополнительные функции, но я застрял в попытке сделать его более "модульным", то есть: использовать больше методов по сравнению с длинным методом main().

У меня есть это:

while(!guessed) {
    System.out.println("Guess a number between 1 and 1000.");
    guessedNum = Integer.parseInt(input.nextLine());
    numCheck(guessedNum);
}
timeEnd = System.currentTimeMillis();
input.close();
System.out.println("Seconds to guess: " + (timeEnd - timeStart)/1000);

который работает просто отлично, но если я попытаюсь создать отдельный метод для "предположения числа", например так:

public static int guessNum() {
    System.out.println("Escriba un numero entre 1 y 1000.");
    Scanner input = new Scanner(System.in);
    guessedNum = Integer.parseInt(input.nextLine());
    input.close();
    return guessedNum;
}

выдает следующую ошибку:

Exception in thread "main" java.util.NoSuchElementException: No line found
    at java.util.Scanner.nextLine(Unknown Source)
    at game.Guess.guessNum(Guess.java:40)
    at game.Guess.start(Guess.java:28)
    at game.Game.main(Game.java:21)

Я пытался поиграть, используя разделитель и nextLine(), но это всегда одна и та же ошибка. Также я попытался отладить его с помощью eclipse, но когда он переходит на nextLine, он переходит на страницу с сообщением "Источник не найден".

Любая подсказка? Я могу изменить свой вопрос, если это необходимо.

1 ответ

Решение

Ваше закрытие Scanner в этой строке:

input.close();

который также закрывает System.in, Поэтому в следующий раз, когда вы будете читать с того же сканера, вы получите эту ошибку.

Другие вопросы по тегам