为什么当我在"您要订购多少"下"valid = true;"时,在调试模式下代码有效,但运行它不起作用?



,但是如果我将其放在"有效= 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; } 别的 休息; }

当用户输入nN时,您可以使用 valid=false结束外部do-lile循环。因此:当用户输入其他任何内容时, else 路径就会采用。在其他路径中可以找到什么? break 结束了do-while循环。

换句话说:您的代码完全按照您的要求执行:以一种或另一种方式结束do-while循环。

真正的答案是:您需要更加谨慎地放入代码中。每个角色都很重要。当您将某些内容放入代码中进行实验时:请记住,它在那里并且会产生效果。

最新更新