我的代码循环两次。在它之前的第一个while循环询问用户输入(做出选择)。我把选择默认为“N”更简单。
所以它命中if语句并开始第二个while循环。现在它要求用户做出另一种选择。用户只能输入“A”,因为其他任何错误陷阱。用户输入“A”并被提示添加数字(变量num = 0)。用户输入一个数字。
if语句关闭,第二个while循环返回到顶部,只有当用户被要求选择时它才会停止。相反,它继续循环,点击else语句,然后再次返回到第二个while循环的顶部,并向用户提示选择。
更新了更多信息的代码
while (true) { // 1st while loop
choice="N";
if (choice.equalsIgnoreCase("N")) {
while (true) { // 2nd while loop
System.out.println("|-|-| Add Number [A] Go Back [B]");
System.out.println("NUMBER: "+num);
System.out.print("Choice: ");
choice = c.nextLine();
if (choice.equalsIgnoreCase("A")){
System.out.print("Add: ");
num = (c.nextInt() + num);
System.out.println("");
}
else if (choice.equalsIgnoreCase("B")){
break;
}
else {
System.out.println("ERROR 19: Invalid response");
System.out.println("");
}
}
}
}
我尝试过使用不同的变量进行选择。那没起效。我想我可能需要尝试捕获第二个while循环(在用户被提示输入数字之前),但这只是一个想法。我的问题是,为什么会发生这种情况?如果可能的话,我该如何解决?
答案 0 :(得分:0)
在您的代码中,而(true)将无限期地保持循环。将条件从始终 true更改为有条件 true的条件(在 while 循环中使用 if 条件或 for 循环)。或者当您认为循环应该停止时,使用中断,返回和继续的组合。
答案 1 :(得分:0)
在break
和if
声明中添加else
声明:
if (choice.equalsIgnoreCase("A")){
System.out.print("Add: ");
num = (c.nextInt() + num);
System.out.println("");
break;
}
else {
System.out.println("ERROR 19: Invalid response");
System.out.println("");
break;
}
答案 2 :(得分:0)
我认为你应该改变你的循环。我建议像这样循环:
boolean finished = false;
while(!finished) {
...
choice = c.nextLine();
if (choice.equalsIgnoreCase("A")){
System.out.print("Add: ");
num = (c.nextInt() + num);
System.out.println("");
} else if (choice.equalsIgnoreCase("Exit")) { //You can change this whatever you want
finished = true;
} else if (...){
... //another choice
}
else {
System.out.println("ERROR 19: Invalid response");
System.out.println("");
}
}
答案 3 :(得分:0)
Scanner#nextLine消耗用户输入的整行(因此"下一行")。这就是为什么在使用nextLine时你永远不会重复循环的原因。扫描器#nextInt没有,并且下次调用Scanner#nextInt时会消耗 last newline 字符。
回答我的问题:
if (choice.equalsIgnoreCase("A")){
System.out.print("Add: ");
num = (c.nextInt() + num); //Prompts user for input (number)
c.nextLine(); // Consumes the last newline character
System.out.println("");
}
else if (choice.equalsIgnoreCase("B")){
break;
}
else {
System.out.println("ERROR 19: Invalid response");
System.out.println("");
int option = input.nextInt();
input.nextLine(); // Consume newline left-over
String str1 = input.nextLine();
从这里回答:Scanner is skipping nextLine() after using next(), nextInt() or other nextFoo() methods