Закрытие сканера выбрасывает java.утиль.Исключение NoSuchElementException

Я пишу боевую систему RPG с нуля на Java, амбициозно, не так ли? Ну, у меня проблемы. Вот мой код:

void turnChoice() {
    System.out.println("What will you do? Say (Fight) (Run) (Use Item)");
    Scanner turnChoice = new Scanner(System.in);
    switch (turnChoice.nextLine()) {
        case ("Fight"):
            Combat fighting = new Combat();
            fighting.fight();
        default:
    }

    turnChoice.close();
}

когда он попадает в эту точку в коде, я получаю:

что вы будете делать? Say (Fight) (Run) (Use Item)
Исключение в потоке" main " java.утиль.NoSuchElementException: строка не найдена
на Яве.утиль.Сканер.строки(неизвестный источник)
на Бороться.turnChoice (Combat.java: 23)

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

1 ответов


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

Scanner sc1 = new Scanner(System.in);
String str = sc1.nextLine();
...
sc1.close();
...
...
Scanner sc2 = new Scanner(System.in);
String newStr = sc2.nextLine();      // Exception!