Не дожидается ввода со сканера, выбрасывает ElementNotFoundException - PullRequest
0 голосов
/ 19 апреля 2019

Поэтому я пытаюсь написать простое меню, в котором на экран выводятся несколько опций, а затем я спрашиваю пользователя, какой вариант они хотят.Все, что они печатают, должно быть сохранено и отправлено в один из пунктов меню.Вместо этого он дает мне «NoSuchElementException» в строке 20 (String userInput = user.next ();).У меня нет .nextInt (), пожалуйста, помогите.

Я пытался сделать некоторое время (user.hasNext ()) {} и if (user.hasNext ()) {} и пробовал их обоих вместе.Я либо получаю исключение, либо оно застревает в бесконечном цикле.

public static void menu(Pet myPet) {


    System.out.println();
    System.out.print("Welcome, " + myPet.getName());

    while(true) {

        Scanner user = new Scanner(System.in);
        System.out.println(". What would you like to do?");
        System.out.println("Games Feed Walk Status");
**Error**   String userInput = user.next();

        if (userInput.equals("Games")) {

Стоит только дождаться ввода.Я попытался просто настроить userInput, и он, кажется, работает тогда, но затем в моем меню «Игры» у меня есть аналогичная настройка, и она тоже ломается.

1 Ответ

1 голос
/ 19 апреля 2019

У меня нет всего вашего исходного кода, но кажется, что вы вызываете close() на сканере в цикле while.

Работает следующий фрагмент:

        while (true) {

        Scanner user = new Scanner(System.in);
        System.out.println(". What would you like to do?");
        System.out.println("Games Feed Walk Status");
        String userInput = user.next();

        System.out.println(userInput);
    }

Правильный запрос:

. What would you like to do?
Games Feed Walk Status
test1
test1
. What would you like to do?
Games Feed Walk Status
test2
test2

Однако добавление вызова close() на сканере в цикле воссоздает исключение, которое вы описываете.

        while (true) {

            Scanner user = new Scanner(System.in);
            System.out.println(". What would you like to do?");
            System.out.println("Games Feed Walk Status");
            String userInput = user.next();

            System.out.println(userInput);
            user.close(); // The offending line!
        }
    }
Games Feed Walk Status
test1
test1
. What would you like to do?
Games Feed Walk Status
Exception in thread "main" java.util.NoSuchElementException
    at java.util.Scanner.throwFor(Scanner.java:862)
    at java.util.Scanner.next(Scanner.java:1371)
    at Test.main(Test.java:11)

Закрытие сканера также будеточистите основной поток и верните его обратно в ОС, а затем сочтите его бесполезным до конца жизненного цикла приложения.Если вам необходимо повторно использовать сканер, вы должны закрыть его тогда и только тогда, когда с ним покончено.

...