2015-09-27 3 views
1

Я не использовал Java через некоторое время, и у меня есть простая, но разочаровывающая ошибка. Мой код-то вроде этого:Stuck In Infinite While Loop (с оператором 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 
} 

Я побежал затмение отладчик и это ясно показывает, что входная переменная изменяется на «Q», когда вводится пользователем, но цикл в то время как постоянно перезапускается.

+0

Вы хотите «вырваться» из инструкции switch или вы хотите перейти в конец цикла 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.