因此,我试图编写一个简单的菜单,在该菜单中将一些选项打印到屏幕上,然后询问用户他们想要哪个选项。无论键入什么内容,都应保存并发送到菜单选项之一。相反,它在第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,然后似乎可以使用,但是然后在我的“游戏”菜单中,我进行了类似的设置,它也在那里中断了。
答案 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,然后在剩余应用程序生命周期中将其视为无用。如果您需要重复使用扫描仪,则应在完成后再关闭它。