为什么这个Java程序有无限循环?

时间:2016-02-08 03:38:02

标签: java

为什么像condition这样的布尔条件总是返回true?即使变量reponse等于常量OUINON;

       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);

1 个答案:

答案 0 :(得分:0)

在您拥有的行

  

condition =!((reponse == NON)||(reponse == OUI));

您需要修复此条件才能使用字符串相等性检查。 ==仅在比较数值和大多数原始数据类型时有效。由于字符串是单独的类和非基本数据类型,因此必须使用字符串方法来检查是否相等。 就像@bradimus说的那样,你需要像

这样的东西
  

condition =!((response.equals(NON)||(response.equals(OUI));

相反,因为.equals是一个字符串方法

这是功能文档:https://docs.oracle.com/javase/7/docs/api/java/lang/String.html#equals%28java.lang.Object%29