2016-02-08 52 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不一定。许多人会认为,“无效的安全”只是隐藏了错误,因为当空值到达不应该到达的地方时,不会发出警告。 –