2011-06-22 223 views
-1
public void play() { 
    int anInteger; 
    //guess return code 
    int code; 

    while (true) { 
     String input=null; 
     input = JOptionPane.showInputDialog("Please enter an integer"); 

     if (input == "-1") { 
      //JOptionPane.showMessageDialog(null, input); 
      System.exit(0); 
      break; 
     } else { 
      if (input==null) { 
       System.exit(0); 
      } else if (input.isEmpty()) { 
       continue; 
      } else { 
       anInteger = Integer.parseInt(input); 
       code = this.oneGuess (anInteger); 
       //JOptionPane.showMessageDialog(null, anInteger); 
      } 
     } 

    } 
} 

我想,如果用戶輸入-1,顯示程序不會再提示消息框。以上是迄今爲止我所提出的代碼。爲什麼它不起作用?不能打破while循環

+2

您正在等待您的代碼中輸入「1」來打破循環,而不是「-1」 – evilone

+0

輸入錯誤............ – hkvega

+1

我還建議您使用適合de的IDE發展(日食,netbeans等)cos編寫==而不是.equals()shd向你顯示警告,你可以糾正你自己。 –

回答

5

您正在將字符串(它們是對象)與==運算符進行比較,該運算符檢查兩個對象引用是否引用同一個對象實例。相反,您應該使用equals方法進行比較。

0

==equals相比,有所不同。第一個比較指針,後者的內容。這可能是你的問題。

-1

您將字符串與==比較,這會產生問題。你可以有許多不同的字符串對象,都顯示「-1」。 ==測試,如果你在左側和右側有完全相同的對象。你想知道,如果左邊和右邊的對象有相同的內容。

最好嘗試

input.equalsIgnoreCase("-1"); 

編輯:要回答的評論:input.equalsIgnoreCase( 「 - 1」)是一樣的input.equals( 「 - 1」)的情況下, 「-1」因爲「-1」中沒有大寫/小寫字母。不過,在字符串的情況下,我更喜歡equalsIgnoreCase,因爲它是在String上定義的,而不是在Object上定義的。儘管如此,由於String類的equals-definition被覆蓋,所以在這個例子中它也起作用,並且不需要「ignoreCase」。

+0

你可能想添加一個'input.equalsIgnoreCase(「 - 1」)'和'input.equals(「 - 1」)'不一樣的例子。 ;) –

7

字符串比較不符合 「==」 運營商合作,使用 「String.equals(對象)」 功能

input.equals("-1"); 

更好的方式是

"-1".equals(input); 

,因爲它也需要照顧空輸入

+0

+1爲轉過來,包括檢查爲空 –

+0

+1,優秀的答案。歡迎來到Stack Overflow。 :) – Mikaveli