Java-错误消息未知原因
我对Java相当陌生,但对C和Python有些了解,因此有些Java看起来很像。我有一个运行良好的程序,直到我尝试创建一个“主菜单”。我在以前的语言中一直这样做,但是程序在循环中只工作一次,然后崩溃 发生错误的代码:Java-错误消息未知原因,java,error-handling,while-loop,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
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
已经有值了吗
感谢任何帮助 这个问题是重复的(可能还有一些其他问题)。所发生的情况是,在
while
循环的第一次迭代中,您正在使用输入流中的系统实例化一个扫描仪
对象。在循环的每个后续迭代中,您将创建一个新的扫描器
对象,然后关闭输入流中的系统
将代码更改为:
// 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);
}
}
这个问题是重复的(可能还有一些其他问题)。所发生的情况是,在while
循环的第一次迭代中,您正在使用输入流中的系统实例化一个扫描仪
对象。在循环的每个后续迭代中,您将创建一个新的扫描器
对象,然后关闭输入流中的系统
将代码更改为:
// 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);
}
}
您必须有扫描仪的下一行。我想这篇文章会对你有所帮助
扫描仪还有一个方法“hasNext()”,您可以像这样使用它:
while(scanner.hasNext()){
// do sth
}
您必须有扫描仪的下一行。我想这篇文章会对你有所帮助
扫描仪还有一个方法“hasNext()”,您可以像这样使用它:
while(scanner.hasNext()){
// do sth
}
我的输入是1或2。只有那些。请注意,在第一个“循环”中它工作正常。问题第二次出现。您应该使用Scanner类中的hasNextXXXX()方法来确保有一个整数可以读取。请检查此链接。此外,您应该只使用一个扫描仪实例,而不是在每次迭代时创建一个新的实例。@KevinEsche您的评论是问题的根本原因。但是是的,他也应该有一些逻辑来处理非整数输入。他将检查链接并尝试解决它。至于输入处理,我会在这个问题解决后再做。一步一个脚印!:)我的输入是1或2。只有那些。请注意,在第一个“循环”中它工作正常。问题第二次出现。您应该使用Scanner类中的hasNextXXXX()方法来确保有一个整数可以读取。请检查此链接。此外,您应该只使用一个扫描仪实例,而不是在每次迭代时创建一个新的实例。@KevinEsche您的评论是问题的根本原因。但是是的,他也应该有一些逻辑来处理非整数输入。他将检查链接并尝试解决它。至于输入处理,我会在这个问题解决后再做。一步一个脚印!:)我以前有过这个,但当遇到问题时,我决定将它放在里面,并在底部添加“in.close();”。但我意识到这不是问题所在,所以我可能应该把它带到外面去。我认为这是问题所在。当运行我的代码时,你会得到什么错误消息?把它放在外面没有什么区别(除了我不会每次都浪费资源调用它),因此我会得到相同的错误。问题似乎和其他人描述的一样。现在将尝试这样做尝试在创建扫描仪后立即添加这行代码:System.out.println(System.in.available())代码>我以前有过这个,但当遇到问题时,我决定将它放在里面,并在底部添加了“in.close();”。但我意识到这不是问题所在,所以我可能应该把它带到外面去。我认为这是问题所在。当运行我的代码时,你会得到什么错误消息?把它放在外面没有什么区别(除了我不会每次都浪费资源调用它),因此我会得到相同的错误。问题似乎和其他人描述的一样。现在将尝试这样做尝试在创建扫描仪后立即添加这行代码:System.out.println(System.in.available())代码>