虽然循环在用户输入后重复两次

时间:2016-10-21 16:43:41

标签: java loops while-loop

我的代码循环两次。在它之前的第一个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循环(在用户被提示输入数字之前),但这只是一个想法。我的问题是,为什么会发生这种情况?如果可能的话,我该如何解决?

4 个答案:

答案 0 :(得分:0)

在您的代码中,而(true)将无限期地保持循环。将条件从始终 true更改为有条件 true的条件(在 while 循环中使用 if 条件或 for 循环)。或者当您认为循环应该停止时,使用中断返回继续的组合。

答案 1 :(得分:0)

breakif声明中添加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