Воссоздание сканера в Java - PullRequest
0 голосов
/ 07 октября 2019

Я пишу игру на Java, и у меня есть метод, который просит пользователя ввести значение из консоли:

public String getUserInput() {
    try (Scanner scan = new Scanner(System.in)) {
        String s = scan.nextLine();
        return s;
    }
}

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

Но когда я вызываю методы, подобные этому для второго вызова - я получаю

Exception in thread "main" java.util.NoSuchElementException: No line found

Проблемы:

  • Я не понимаю основную причину этой ошибки: я знаю, что не могу открыть сканер повторно, но здесь я не открываю его снова, но я воссоздаю его.
  • Как я могу с этим справиться?

1 Ответ

5 голосов
/ 07 октября 2019

Не открывать и не создавать заново. Используйте один Scanner на время вашей программы.

Закрытие Scanner (как в этом случае с вашим блоком try-with-resources) закроет его ввод, в этом случае System.in. Вы не хотите закрывать это, так как вы не можете открыть его снова.

...