Java - 错误消息未知原因

时间:2015-11-04 07:38:18

标签: java error-handling while-loop

我对Java很陌生,但对C和Python有所了解,因此有些Java看起来很像。我有一个运作良好的程序,直到我尝试创建一个"主菜单"。我做的事情总是用以前的语言完成,但程序只能循环一次,然后崩溃。

发生错误的代码:

while (true)
        {   
            java.util.Scanner in = new java.util.Scanner(System.in);

            System.out.println("Alternative 1. Add A New Person To Database");
            System.out.println("Alternative 2. Quit The Program");

            int choice = in.nextInt(); //This is where error is found! (:22)

            if (choice==1)
            {
                choice1();
            }
            if (choice==2)
            {
                System.out.println("Look at the file text.txt");
                System.exit(-1);
            }
        }

错误讯息:

Exception in thread "main" java.util.NoSuchElementException
    at java.util.Scanner.throwFor(Unknown Source)
    at java.util.Scanner.next(Unknown Source)
    at java.util.Scanner.nextInt(Unknown Source)
    at java.util.Scanner.nextInt(Unknown Source)
    at EgnaProgrammet.main(EgnaProgrammet.java:22)

我确定输入有问题,因为问题发生在我第二次想要输入的时候。可能是因为choice已有值吗?

任何帮助!

2 个答案:

答案 0 :(得分:0)

此问题与this SO post(可能还有其他几个)重复。发生的事情是,在while循环的第一次迭代中,您使用Scanner输入流实例化System.in对象。在循环的每个后续迭代中,您将创建一个新的Scanner对象,然后关闭System.in输入流。

将您的代码更改为:

// declare your Scanner only once, *outside* the while loop
java.util.Scanner in = new java.util.Scanner(System.in);
System.out.println(System.in.available());

while (true) {
    System.out.println("Alternative 1. Add A New Person To Database");
    System.out.println("Alternative 2. Quit The Program");

    int choice = in.nextInt(); //This is where error is found! (:22)

    if (choice == 1) {
        choice1();

    } else if (choice == 2) {
        System.out.println("Look at the file text.txt");
        System.exit(-1);
    }
}

答案 1 :(得分:0)

您必须拥有扫描仪的下一行。我认为这篇文章会对你有帮助

Scanner is skipping nextLine() after using next(), nextInt() or other nextFoo() methods

扫描仪还有一个方法“hasNext()”,您可以使用它:

while(scanner.hasNext()){
// do sth
}