2013-09-06 5 views
-2

Когда я создаю переменную и обертываю код в цикле while, он никогда не повторяется. Вот пример кода, который я попробовал.while loop не работает Java

String repeat = "y"; 
    Scanner keyboard = new Scanner(System.in); 
    while (repeat == "y"){ 
     String word1 = "this"; 
     String word2 = "that"; 
     String word3 = word1 + word2; 
     System.out.println(word3); 
     for(int x = 10; x<20; x = x+1){ 

      word3 = word1 + word3; 
      System.out.println(word3); 
     } 
     repeat = keyboard.nextLine(); 
    } 

Независимо от того, какой ввод находится в конце сценария, он заканчивается. Любая помощь?

+9

Использование '' equals' метод String' для сравнения 'значения String', а не' == ', который сравнивает ссылки на объект, чтобы определить, если они относятся к одному объекту , – rgettman

+0

@ rgettman Они здесь литералы, если в коде нет чего-то недостающего. –

+0

@SotiriosDelimanolis Да, это литералы, поэтому '' y "' будет интернирован. По этой причине будет введен цикл 'while'. Но после 'repeat = keyboard.nextLine();', то 'repeat' больше не будет буквальным. В любом случае здесь требуется «.equals». – rgettman

ответ

1

Измените строку

while (repeat == "y") 

в

while("y".equalsIngnoreCase(repeat)) 

и

keyboard.nextLine() ; 

в

keyboard.next(); 

Чтение How do I compare strings in Java? будет полезно.

+0

Я удалил свой ответ, потому что я проверил javadoc, и у Сканера нет метода readLine(). – Marcelo

+1

@Marcelo Да .it имеет следующий() метод для чтения строки. Я обновил его. – Prabhaker

0

Когда вы сравниваете строку, используя '=='. вы сравниваете ссылку на объект. Вы по существу спрашиваете, совпадают ли эти два объекта, а не сравниваются содержимое строки. Попробуйте использовать метод String.compareTo (..).

Пример:

while (repeat.compareTo("y") == 0) { 
+0

Почему 'compareTo' над' equals'? – Cruncher

+0

Нет никаких предпочтений, кроме того, что вы могли бы расходовать дополнительную информацию из возвращаемого значения, в противном случае равно работает. – samsquanch

+0

Если вы посмотрите на исходный код 'equals' и' compareTo', вы увидите, что 'equals' определенно быстрее. – Marcelo

0

Проблема, вероятно, происходит от фактов вы сравните два объекта с = но я предполагаю, что вы хотите сделать, это сравнить строки с String, метод равно, так что это будет выглядеть так:

while(repeat.equals("y")){ 
... 
} 
0

Никогда не используйте == для сравнения строк.

Попробуйте это: -

while ("y".equalsIngnoreCase(repeat))