2010-03-12 3 views
2

Я пытаюсь сделать логический тест, так что если давление в шинах ниже 35 или более 45, система выдает «плохую инфляцию».Почему мой булевский тест в java всегда терпит неудачу?

В моем классе я должен использовать логическое значение, которое я и пытался. Однако возвращаемое значение boolean всегда верно. Я не понимаю, почему.

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

Ваш код достаточно ясен, что вам не нужны комментарии, так как они просто повторяют ту же информацию (это хорошо!).для дальнейшего использования, самый важный момент для запоминания - объяснить, ПОЧЕМУ вы что-то делаете, а не то, что вы делаете. : D –

+0

Вы также можете взглянуть на 'java.util.Scanner'. – polygenelubricants

ответ

15
if (goodPressure = true) 

Изменить это:

if (goodPressure == true) 

Или еще лучше:

if (goodPressure) 

операторы Логическое сравнения == и !=. Оператор присваивания =.

Кроме того, вы должны сначала установить goodPressure = true;, прежде чем вы проверите нарушение условий.

+1

Вам также нужно инициализировать goodPressure для true, иначе он всегда будет false. –

+0

Спасибо, сэр! Я знал, что это просто! – Cheesegraterr

+2

Если вы обнаружите, что слишком много писали эту ошибку, вы можете заставить компилятор уловить ее, поставив константы в левой части '==' (вместо переменных). Например, 'if (true = goodPressure)' генерирует ошибку компилятора. – Seth

1

Вы инициализируете goodPressure на false, но тогда никогда не назначаете true, поэтому оно всегда будет ложным. Попробуйте инициализировать его true.

+0

+1 Хороший улов !! – polygenelubricants

0

Похоже, вы никогда не устанавливаете goodPressure в true. Возможно, вы хотите начать с того, что он установлен в true, поскольку, похоже, ваши условия при необходимости установят значение false.

Кроме того, я думаю, что эта линия должна бросить предупреждение компилятора (или ошибка?)

if (goodPressure = true) 

при компиляции в Java. Я думал, что компилятор не позволит вам сделать задание в если чек, но, возможно, это действительно ... Я думаю, что вы хотите быть:

if (goodPressure == true) 

Или просто:

if (goodPressure) 
0

Ваш проблема в том, что в выражении if (goodPressure = true) имеется только один знак =. Это присваивает true goodPressure, а затем проверяет, действительно ли goodPressure верна.

Вы должны использовать == или А .equals()

0

Посмотрите на последний, если заявление. Вы выполняете присваивание, а не сравнение.

BTW. Ваша программа всегда вернет false, как только вы это сделаете ... посмотрите на свою логику. Где вы устанавливаете goodPressure в true?

0

Обычно код, подобный if (variable = constantValue), рассматривается как ошибка компиляции в Java. Однако существует исключение, когда константное значение является булевым. В этом случае утверждение равно if (constantValue). Эта проблема не может быть найдена на этапе компиляции.

Итак, я предлагаю 1) не сравнивать с булевым постоянным значением, просто сделайте это с помощью if (booleanVar); 2) всегда ставьте постоянное значение вперед, например «if (true = variable)» приведет к сбою компиляции.

Смежные вопросы