Почему мой логический тест в Java всегда терпит неудачу? - PullRequest
2 голосов
/ 12 марта 2010

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

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

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

Ответы [ 6 ]

15 голосов
/ 12 марта 2010
    if (goodPressure = true)

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

    if (goodPressure == true)

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

    if (goodPressure)

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

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

1 голос
/ 12 марта 2010

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

0 голосов
/ 12 марта 2010

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

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

0 голосов
/ 12 марта 2010

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

КСТАТИ. Ваша программа всегда будет возвращать false, как только вы это сделаете ... посмотрите на свою логику. Где вы устанавливаете goodPressure в true?

0 голосов
/ 12 марта 2010

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

Вам необходимо использовать == или .equals ()

0 голосов
/ 12 марта 2010

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

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

if (goodPressure = true)

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

if (goodPressure == true)

Или просто:

if (goodPressure)
...