2016-02-08 56 views
0

爲什麼像condition這樣的布爾條件總是返回true?即使變量reponse等於常量OUINON;這個Java程序爲什麼有無限循環?

 final String OUI = "O"; 
     final String NON = "N"; 
     String reponse = OUI; 
     // some code was omitted 
     do { 
     // some code was omitted 

     // true 
     boolean condition = false; 

     do { 
      System.out.println(MSG_SOL_TRONCON); 
      reponse = mScanner.nextLine(); 
      // Debug 
      System.out.println("Reponse:" + reponse + ":fin"); 
      /* 
      // Boucle infinie, problème avec la condition 
      // Infinite Loop 
      condition = !((reponse == NON) || (reponse == OUI)); 
      System.out.println("Condition : " + condition); 
      if (condition) { 
       System.out.println(MSG_ERR_TRONCON); 
      } // if 
      */ 
     } while(condition); 

    } while (reponse != NON); 
+2

嘗試'NON.equals(響應)'不'我們=='或'='用繩子See.http:!/ /stackoverflow.com/questions/513832/how-do-i-compare-strings-in-java – bradimus

回答

0

你在哪裏有

條件=((==效應初探NON)||(效應初探== OUI))就行了!;

您需要修復此情況以使用字符串相等性檢查。 ==只在比較數值和最原始的數據類型時才起作用。由於字符串是一個單獨的類和非基元數據類型,因此必須使用字符串方法來檢查相等性。 因此像@bradimus說的話,你需要像

條件=((response.equals(NON)||(response.equals(OUI));!

代替,因爲。相當於是一個字符串的方法

這裏的函數文檔:https://docs.oracle.com/javase/7/docs/api/java/lang/String.html#equals%28java.lang.Object%29

+1

'NON.equals(response)'優先於'response.equals(NON)'。它是'零'安全的。 – bradimus

+0

@bradimus不一定。許多人會認爲,「無效的安全」只是隱藏了錯誤,因爲當空值到達不應該到達的地方時,不會發出警告。 –