2010-03-12 3 views
2

타이어 압력 중 하나가 35 또는 45 이상이면 시스템이 "나쁜 인플레이션"을 출력하도록 부울 테스트를하려고합니다.Java에서 내 부울 테스트가 항상 실패하는 이유는 무엇입니까?

내 수업에서는 내가 시도한 부울을 사용해야합니다. 그러나 반환 된 부울은 항상 참입니다. 나는 왜 그런지 이해하지 못한다.

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) 

부울 비교 연산자 ==!=입니다 : 더 나은 아직

if (goodPressure == true) 

또는. =은 대입 연산자입니다.

또한 위반 조건을 확인하기 전에 처음에 goodPressure = true;을 설정해야합니다.

+1

goodPressure를 true로 초기화해야합니다. 그렇지 않으면 항상 false가됩니다. –

+0

고맙습니다! 나는 그것이 단순한 무엇인가 알고 있었다! – Cheesegraterr

+2

이런 종류의 버그를 많이 작성했다면, 컴파일러가 변수 대신에'=='의 왼쪽에 상수를 넣어서 잡을 수있게 만들 수 있습니다. 예를 들어'if (true = goodPressure)'는 컴파일러 오류를 생성합니다. – Seth

1

goodPressure를 false로 초기화하지만 true를 할당하지 않으므로 항상 false가됩니다. true로 초기화 해보십시오.

+0

+1 멋진 캐치! – polygenelubricants

0

결코 좋은 압력을 설정하지 않은 것 같습니다. 어쩌면 당신은 그것을 true로 설정하고 시작하고 싶을 것입니다. 조건에 따라 필요하다면 false로 설정 될 것입니다.

또한,이 라인은 컴파일러 경고 던져해야한다고 생각 (또는 오류?) 자바로 컴파일 할 때

if (goodPressure = true) 

. 나는 컴파일러가 체크하는 경우가에서 임무를 수행 할 수없는 것이라고 생각하지만 어쩌면 그것은 당신이 원하는 내 생각은 ... 수행합니다 단지

if (goodPressure == true) 

또는 :

if (goodPressure) 
0

귀하 문제는 표현식 if (goodPressure = true)에 단 하나의 = 기호 만 있다는 것입니다. goodPressure를 true로 지정하고 goodPressure가 여전히 true인지 확인합니다.

당신은 == 또는 .equals() if 문 마지막에

0

봐를 사용해야합니다. 비교가 아닌 과제를하고 있습니다.

BTW. 당신이 한 번 당신의 프로그램은 항상 거짓을 반환합니다 ... 당신의 논리를보세요. goodPressure를 어디에서 true로 설정합니까?

0

일반적으로 if (variable = constantValue)과 같은 코드는 Java에서 컴파일 오류로 처리됩니다. 그러나 상수 값이 부울 인 경우 예외가 있습니다. 이 경우 진술은 if (constantValue)과 같습니다. 이러한 종류의 문제는 컴파일 단계에서 찾을 수 없습니다.

그래서 1) 부울 상수 값과 비교하지 말고 그냥 if (booleanVar)으로 처리하십시오. 2) 'if (true = variable)'와 같이 항상 상수 값을 앞에 놓으면 컴파일이 실패합니다.