陷入无限 While 循环(使用 switch 语句)
Stuck In Infinite While Loop (with switch statement)
我有一段时间没有使用 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 循环不断重新启动。
更改为
while(!input.equals("Q"))
比较字符串 equals()
而不是 ==
此外,在每个案例后使用 break;
,否则您将得到 fallthrough。
您应该使用 equals
(值比较)而不是 ==
(比较引用)来比较字符串:
while (!"Q".equals(input))
提示: 如果你在字符串文字上调用 equals
,如果 input
是,它不会失败并返回 NullPointerException
,通过有机会,null
- 在这种情况下,它只会 return false
比较字符串时必须使用input.equals("Q")
。
我有一段时间没有使用 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 循环不断重新启动。
更改为
while(!input.equals("Q"))
比较字符串 equals()
而不是 ==
此外,在每个案例后使用 break;
,否则您将得到 fallthrough。
您应该使用 equals
(值比较)而不是 ==
(比较引用)来比较字符串:
while (!"Q".equals(input))
提示: 如果你在字符串文字上调用 equals
,如果 input
是,它不会失败并返回 NullPointerException
,通过有机会,null
- 在这种情况下,它只会 return false
比较字符串时必须使用input.equals("Q")
。