我对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
已有值吗?
任何帮助!
答案 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
}