,但是如果我将其放在"有效= false;"中它在调试或运行中不起作用。
实际上,即使运行代码,我也无法在"您要订购其他任何内容?"之后输入任何内容,无论它是在调试还是运行模式下。
我想念什么吗?在询问"您想订购多少个"之后,您将数字提出问:"您想订购其他任何东西吗?到目前为止,其他一切都在努力。
do {
boolean itemValid = true;
while (itemValid) {
System.out.println("Please enter an item name: ");
String enterItem = scnr.nextLine();
if (keepTrack.containsKey(enterItem)) {
System.out.println(keepTrack.get(enterItem));
itemValid = false;
} else {
System.out.println("Sorry we don't exist.");
continue;
}
System.out.println("How many do you want to order?");
int enterQuan = scnr.nextInt();
yourOrder = enterQuan;
valid = false;
}
System.out.println("Do you want to order anything else?");
String yesNo = scnr.nextLine();
if (yesNo.equalsIgnoreCase("n")) {
valid = false;
} else
break;
} while (valid);
您的代码两个问题。首先,可能尚未注意到:
do ...
if (keepTrack.containsKey(enterItem)) {
System.out.println(keepTrack.get(enterItem));
itemValid = false;
} else {
System.out.println("Sorry we don't exist.");
continue;
}
当您的输入为"无效"时,您会变成 else 分支。Else Branch 继续循环。循环取决于value
。因此:一旦您从value = true
开始,然后才有一个无效的输入,最终将获得永无止境的循环。因为循环启动和continue
语句之间的任何内容都不会改变结束循环的条件。
您的实际问题:当您调用不的int enterQuan = scnr.nextInt()
时,请在控制台上输入的" Enter"。有关详细信息,请参见此处。
还有另一个问题:
if(yesno.equalsignorecase(" n"(({ 有效= false; } 别的 休息; }
当用户输入n
或N
时,您可以使用 valid=false
结束外部do-lile循环。因此:当用户输入其他任何内容时, else 路径就会采用。在其他路径中可以找到什么? break 。也结束了do-while循环。
换句话说:您的代码完全按照您的要求执行:以一种或另一种方式结束do-while循环。
真正的答案是:您需要更加谨慎地放入代码中。每个角色都很重要。当您将某些内容放入代码中进行实验时:请记住,它在那里并且会产生效果。