Изменение значения логической переменной с помощью методов класса? - PullRequest
0 голосов
/ 29 сентября 2019

Так что я возиться с Java и столкнулся с проблемой с некоторым кодом, который я пытаюсь написать.

Я создал класс с именем LogicGate, в этом классе есть методы для установки состоянияэкземпляр LogicGate имеет значение true или false.

LogicGate имеет только один атрибут и его логическое значение true или false.

Кажется, что все методы работают, кроме одного (Вызванный not ()), где я меняю логическое значение на false, если true и true, если false.

Код изменяет значение в первый раз с true на false, но во второй раз, кажется, игнорирует оператор if,

//Main

public class main {

    public static void main(String[] args) {

        LogicGate logicGate = new LogicGate(true);

        System.out.println(logicGate.state());
        System.out.println("");

        logicGate.not(logicGate);
        System.out.println("");

        System.out.println(logicGate.state());
        System.out.println("");

        logicGate.not(logicGate);
    }

}

//Class Logicgate


public class LogicGate {
    //The attribute for the for the object
    private boolean state;

    //Creating the constructor for the object logic gate 
    public LogicGate(boolean logicGateState) {
        state = logicGateState;
    }

    //This method changes the state of the Logic Gate
    public  void not(LogicGate obj) {

        //Saving the current state of the logic gate
        boolean currentState = obj.state();

        System.out.println("....." + currentState);

        //Checks the state of the object instance and changes it accordingly
        if(currentState = true) {
            obj.negate(obj);
            System.out.println("The state has changed to: " + obj.state() + " Should be false");
        }
        else if(currentState = false) {     
            obj.set(obj);
            System.out.println("The state has changed to: " + obj.state() + " Should be true");

        }


    }

    //Sets the state of the object boolean variable to true 
    public  void set(LogicGate obj) {
        obj.setState(true);

    }



    //Sets the state of the object boolean variable to false 
    public  void negate(LogicGate obj) { 
        obj.setState(false);

    }

    //This method will return the state of the object
    //it can be either true or false 
    public boolean state() {
        return state;
    }

    //Sets the boolean attribute 
    public void setState(boolean state) {
        this.state = state;
    }


}

Логическое значение должно просто меняться каждый раз, когда вызывается метод not.

В последней строке кода должно быть указано The state has changed to: true Should be true.

Результат Iполучаю это:

true

.....true
The state has changed to: false Should be false

false

.....false
The state has changed to: false Should be false

Ответы [ 2 ]

1 голос
/ 29 сентября 2019

попробуйте изменить все одинарные = на "==" или код деструктора

 if(currentState) {

            obj.negate(obj);
            System.out.println("The state has changed to: " + obj.state() + " Should be false");
        }
        else{     
            obj.set(obj);
            System.out.println("The state has changed to: " + obj.state() + " Should be true");

скажите, работает ли он

1 голос
/ 29 сентября 2019

Таким образом, есть несколько проблем, а именно:

  1. Оператор = является оператором присваивания.Вы делаете сравнения, что означает, что вам нужно использовать оператор == .
  2. Для boolean значений вам на самом деле не нужно использовать оператор сравнения в if, потому что это либо true, либо false (не так).
  3. Если ваш первый if проверяет true, то ваш логически проверяет false

Так что ваш код должен выглядеть примерно так:

if(currentState) {
  obj.negate(obj);
  System.out.println("The state has changed to: " + obj.state() + " Should be false");
} else {
  obj.set(obj);
  System.out.println("The state has changed to: " + obj.state() + " Should be true");
}

Я также не понимаю, почему вы передаете объект LogicGate в метод LogicGate, чтобы установить состояние переменной, содержащейся в LogicGate (или для любого из LogicGates методы в этом отношении).Почему бы вам просто не использовать метод, который у вас уже есть setState(boolean state), тогда ваша реализация будет выглядеть так:

if(currentState) {
  obj.setState(Boolean.FALSE);
  System.out.println("The state has changed to: " + obj.state() + " Should be false");
} else {
  obj.setState(Boolean.TRUE);
  System.out.println("The state has changed to: " + obj.state() + " Should be true");
}

В конечном счете, ваш not() метод должен быть таким простым:

public void not() {
  this.state = !state;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...