【问题标题】:Loop not ending循环未结束
【发布时间】:2019-03-17 04:49:05
【问题描述】:

我试图循环这个 if 语句,直到用户输入正确的答案。即使我输入正确的输入,它也不会在运行时结束。另外,我如何在 while 循环之外使用 playerPick 变量而不弄乱代码?

System.out.println("Please choose either Applaro, Svartra, Tunholmen, or Godafton.");
boolean temp = true;
    while (temp) {
        String playerPick = console.next();
        if (!playerPick.equals("Applaro") && !playerPick.equals("Svartra") && !playerPick.equals("Tunholmen")
                && !playerPick.equals("Godafton")) {
            System.out.println("Please enter a valid input.");
        } else if (playerPick.equals("Applaro") || playerPick.equals("Svartra") || playerPick.equals("Tunholmen")
                || playerPick.equals("Godafton")) {
            System.out.println("You have picked " + playerPick);
        }
    }

【问题讨论】:

  • 您永远不会将 temp 更改为 false。
  • 您不要更改temp的值

标签: java arrays if-statement while-loop


【解决方案1】:

这可以删除可读性较差的变量“temp”。
执行while循环会更好地提示用户输入。
我认为删除while循环中的if-else子句更具可读性。

public static void main(String[] args) {
    String prompt = "Please choose either Applaro, Svartra, Tunholmen, or Godafton.";
    String playerPick = null;
    try (Scanner console = new Scanner(System.in)) {
        do {
            System.out.println(prompt);
            playerPick = console.next();                   
            prompt = "Please enter a valid input.";
        } while (!playerPick.equals("Applaro") && !playerPick.equals("Svartra") && !playerPick.equals("Tunholmen") && !playerPick.equals("Godafton"));
        System.out.println("You have picked " + playerPick);

    } catch(Exception ex) {
        System.out.println("Please enter a valid input.");
    }        
}

【讨论】:

    【解决方案2】:

    只要 temp 为真,while 循环就会继续。在嵌套的 if 语句中,我们将 temp 设置为 false 退出循环。

    至于 playerPick:该变量在循环之外声明,因此它应该可以在声明下方的函数内的任何位置访问(代码在此处自上而下阅读)。如果您尝试从其他方法访问 playerPick,则需要在超类中声明该变量。

    注意:我还清理了您的 if 语句以使其更具可读性。

    希望这会有所帮助!

    System.out.println("Please choose either Applaro, Svartra, Tunholmen, or Godafton.");
    boolean temp = true;
    String playerPick = "";
        while (temp) {
            playerPick = console.next();
            if (playerPick.equals("Applaro") || playerPick.equals("Svartra") || playerPick.equals("Tunholmen") || playerPick.equals("Godafton")) {
                System.out.println("You have picked " + playerPick);
                temp = false;
            }
            else
                System.out.println("Please enter a valid input.");
        }
    

    【讨论】:

      【解决方案3】:

      只需设置temp = false,如下例所示:

      System.out.println("Please choose either Applaro, Svartra, Tunholmen, or Godafton.");
          boolean temp = true;
              while (temp) {
                  String playerPick = console.next();
                  if (!playerPick.equals("Applaro") && !playerPick.equals("Svartra") && !playerPick.equals("Tunholmen")
                          && !playerPick.equals("Godafton")) {
                      System.out.println("Please enter a valid input.");
                  } else if (playerPick.equals("Applaro") || playerPick.equals("Svartra") || playerPick.equals("Tunholmen")
                          || playerPick.equals("Godafton")) {
                      System.out.println("You have picked " + playerPick);
                      //here
                      temp = false;
                  }
              }
      

      【讨论】:

      • 或使用break
      • 谢谢你知道我如何能够在 while 循环之外使用 playerPick 变量吗?
      • 在循环外声明它?
      • 当我这样做时,程序在我运行时变成了一个无限循环
      猜你喜欢
      • 2014-10-31
      • 1970-01-01
      • 1970-01-01
      • 2013-04-10
      • 1970-01-01
      • 1970-01-01
      • 2019-05-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多