不等待扫描仪输入,抛出ElementNotFoundException

时间:2019-04-19 18:33:45

标签: java java.util.scanner nosuchelementexception

因此,我试图编写一个简单的菜单,在该菜单中将一些选项打印到屏幕上,然后询问用户他们想要哪个选项。无论键入什么内容,都应保存并发送到菜单选项之一。相反,它在第20行给我一个“ NoSuchElementException”(字符串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 个答案:

答案 0 :(得分:1)

我还没有全部源代码,但似乎您在while循环中正在使用扫描器上的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);
    }

正确提示:

. 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)

关闭扫描器还将刷新基础流,并将其释放回OS,然后在剩余应用程序生命周期中将其视为无用。如果您需要重复使用扫描仪,则应在完成后再关闭它。