2015-09-27 81 views
1

我有一段时间没有使用过Java,并且有一个简单但令人沮丧的错误。我的代码是这样的:卡住在无限while循环(与switch语句)

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循环不断重新启动。

+0

你想从switch语句中“break”吗?或者你想跳转到while循环的结尾吗?因为在后一种情况下,'break'指向'switch'并且需要显式标签才能正常工作。 – Clashsoft

回答

3

变化,而到

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

比较字符串equals()==

除了使用break;每种情况后,否则你将有一个fallthrough

+1

.equals()!当然。非常感谢你,我最近一直在做很多python,它搞乱了我lol –

+0

为什么反对投票? – silentprogrammer

+1

如果你知道这个问题是重复的,你应该投票,而不是回答它。我们并不真的需要关于这个主题的答案。我知道新用户可能不知道它,但你已经有5k了,所以请使用*闭合/标记*特权。 – Pshemo

0

你应该比较使用equals字符串(值进行比较),而不是==(这比较引用):

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

提示:,如果你对字符串调用equals文字,它不会失败,NullPointerException万一input是,由于某些原因,null - 在这样的情况下,将只返回false

0

你有比较■当使用input.equals("Q") trings。