使用类方法更改布尔变量的值?

所以我正在摆弄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;

    }



每次调用 not 方法时,布尔值都应该改变。


代码的最后一行应该说The state has changed to: true Should be true。

开心每一天1111
浏览 105回答 2
2回答

慕丝7291255

所以有几个问题,即:运算符=是赋值运算符。您正在进行比较,这意味着您需要使用==运算符。对于boolean值,您实际上不需要在 if 中使用比较运算符,因为它是trueor false(不是 true)。如果你的第一个if正在检查 atrue那么你的 else 逻辑上正在检查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;}

杨魅力

尝试将所有单个 = 更改为“==”或析构函数代码 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");告诉我是否有效
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java