2010-03-12 6 views
2

J'essaie de faire un test booléen pour que, si l'une des pressions des pneus est inférieure à 35 ou supérieure à 45, le système produise un «mauvais gonflage».Pourquoi mon test booléen en Java échoue toujours?

Dans ma classe, je dois utiliser un booléen, qui est ce que j'ai essayé. Cependant, le booléen retourné est toujours vrai. Je ne comprends pas pourquoi.

public class tirePressure 
{ 
    private static double getDoubleSystem1() //Private routine to simply read a double in from the command line 
    { 
     String myInput1 = null; //Store the string that is read form the command line 
     double numInput1 = 0;  //Used to store the converted string into an double 
     BufferedReader mySystem; //Buffer to store input 
     mySystem = new BufferedReader (new InputStreamReader (System.in)); // creates a connection to system files or cmd 
     try 
     { 
      myInput1 = mySystem.readLine(); //reads in data from console 
      myInput1 = myInput1.trim(); //trim command cuts off unneccesary inputs 
     } 
     catch (IOException e) //checks for errors 
     { 
      System.out.println ("IOException: " + e); 
      return -1; 
     } 

     numInput1 = Double.parseDouble (myInput1); //converts the string to an double 
     return numInput1;      //return double value to main program 
    } 

    static public void main (String[] args) 
    { 
     double TireFR; //double to store input from console 
     double TireFL; 
     double TireBR; 
     double TireBL; 
     boolean goodPressure; 
     goodPressure = false; 

     System.out.println ("Tire Pressure Checker"); 
     System.out.println (" "); 

     System.out.print ("Enter pressure of front left tire:"); 
     TireFL = getDoubleSystem1(); //read in an double from the user 

     if (TireFL < 35 || TireFL > 45) 
     { 
      System.out.println ("Pressure out of range"); 
      goodPressure = false; 
     } 

     System.out.print ("Enter pressure of front right tire:"); 
     TireFR = getDoubleSystem1(); //read in an double from the user 

     if (TireFR < 35 || TireFR > 45) 
     { 
      System.out.println ("Pressure out of range"); 
      goodPressure = false; 

     } 

     if (TireFL == TireFR) 
      System.out.print (" "); 
     else 
      System.out.println ("Front tire pressures do not match"); 
     System.out.println (" "); 

     System.out.print ("Enter pressure of back left tire:"); 
     TireBL = getDoubleSystem1(); //read in an double from the user 

     if (TireBL < 35 || TireBL > 45) 
     { 
      System.out.println ("Pressure out of range"); 
      goodPressure = false; 
     } 

     System.out.print ("Enter pressure of back right tire:"); 
     TireBR = getDoubleSystem1(); //read in an double from the user 

     if (TireBR < 35 || TireBR > 45) 
     { 
      System.out.println ("Pressure out of range"); 
      goodPressure = false; 
     } 

     if (TireBL == TireBR) 
      System.out.print (" "); 
     else 
      System.out.println ("Back tire pressures do not match"); 

     if (goodPressure = true) 
      System.out.println ("Inflation is OK."); 
     else 
      System.out.println ("Inflation is BAD."); 

     System.out.println (goodPressure); 


    } //mainmethod 
} // tirePressure Class 
+1

votre code est assez clair que vous n'avez pas besoin des commentaires tant qu'ils répéter la même information (qui est une bonne chose!).Pour référence future, le point le plus important à retenir est d'expliquer pourquoi vous faites quelque chose, pas ce que vous faites. : D –

+0

Vous pouvez également jeter un oeil à 'java.util.Scanner'. – polygenelubricants

Répondre

15
if (goodPressure = true) 

Modifier ceci:

if (goodPressure == true) 

Ou encore mieux encore:

if (goodPressure) 

opérateurs de comparaison booléenne sont == et !=. Le = est un opérateur d'affectation.

, vous devez également définir d'abord goodPressure = true; avant de vérifier pour violation des conditions.

+1

Vous devez également initialiser goodPressure à true, sinon il sera toujours faux. –

+0

Merci monsieur! Je savais que c'était quelque chose de simple! – Cheesegraterr

+2

Si vous vous trouvez souvent en train d'écrire ce genre de bug, vous pouvez faire en sorte que le compilateur l'attrape en mettant des constantes sur le côté gauche de '==' (au lieu de variables). Par exemple, 'if (true = goodPressure)' génère une erreur de compilation. – Seth

1

vous initialisez goodPressure false, mais sans jamais attribuer vrai, il sera toujours faux. Essayez de l'initialiser à true.

+0

+1 Belle prise !! – polygenelubricants

0

On dirait que vous ne définissez jamais goodPressure à true. Peut-être que vous voulez commencer par le mettre à vrai, car il semble que vos conditions le définiront faux si nécessaire.

, je pense également cette ligne devrait lancer un avertissement du compilateur (ou erreur?)

if (goodPressure = true) 

lors de la compilation en Java. Je pensais que le compilateur ne vous laissera pas faire une mission dans un si chèque, mais peut-être qu'il fait ... Je pense que vous voulez qu'il soit:

if (goodPressure == true) 

Ou tout simplement:

if (goodPressure) 
0

Votre Le problème est qu'il n'y a qu'un seul signe = dans l'expression if (goodPressure = true). Cela assigne true à goodPressure puis vérifie si goodPressure est toujours vrai.

Vous devez utiliser un == ou un equals()

0

Regardez la dernière instruction if. Vous faites une mission sans comparaison.

BTW. Votre programme retournera toujours faux une fois que vous faites cela ... regardez votre logique. Où définissez-vous goodPressure à true?

0

Habituellement, le code comme if (variable = constantValue) est traité comme erreur de compilation en Java. Cependant, il existe une exception lorsque la valeur de la constante est un booléen. Dans ce cas, l'instruction est égale à if (constantValue). Ce type de problème ne peut pas être trouvé dans la phase de compilation.

Donc, je suggère 1) ne se comparent pas avec une valeur constante booléenne, faites-le par if (booleanVar); 2) toujours mettre la valeur constante devant, comme 'if (true = variable)' provoquera l'échec de la compilation.

Questions connexes