【问题标题】:Stuck In Infinite While Loop (with switch statement) [duplicate]陷入无限循环(带有switch语句)[重复]
【发布时间】:2015-09-27 19:54:22
【问题描述】:

我有一段时间没有使用 Java,遇到了一个简单但令人沮丧的错误。我的代码是这样的:

public static void main(String[] args) throws IOException{
    String input = "";
    BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
    while(input != "Q"){
        input = in.readLine().toUpperCase();
        switch(input){
            default: break;
            case "A": //do stuff break;
            case "B": //do stuff break;
        }
    }
    System.out.println("Out of the loop!"); //never reaches this statement
}

我运行了 eclipse 调试器,它清楚地显示输入变量在用户输入时被更改为“Q”,但 while 循环不断重新启动。

【问题讨论】:

  • 你想break退出switch语句还是跳到while循环的末尾?因为在后一种情况下,breakswitch 为目标,需要显式标签才能正常工作。

标签: java while-loop switch-statement


【解决方案1】:

更改时间

while(!input.equals("Q"))

将字符串与equals() 比较,而不是与==

此外,在每个案例之后使用break;,否则您将拥有fallthrough

【讨论】:

  • .equals()!当然。非常感谢,我最近做了很多 python,这让我很困惑,哈哈
  • 如果你知道这个问题是重复的,你应该投票而不是回答它。我们真的不需要关于那个主题的千分之一的答案。我知道新用户可能不知道,但您已经有 5k,所以请使用您的 关闭/标记 权限。
  • @Pshemo 我下次记住这一点
【解决方案2】:

您应该使用equals(值比较)而不是==(比较引用)来比较字符串:

while (!"Q".equals(input))

提示:如果你在字符串文字上调用equals,它不会以NullPointerException 失败,以防inputnull - 在这种情况下它只会返回false

【讨论】:

    【解决方案3】:

    比较字符串时必须使用input.equals("Q")

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-17
      • 1970-01-01
      • 2018-09-16
      相关资源
      最近更新 更多