即使稍后分配,变量也始终为真?

时间:2012-03-06 18:07:27

标签: java android

我收到此错误,我真的不明白为什么。代码:

    b1.setOnClickListener(new View.OnClickListener() {

        public void onClick(View arg0) {
            // TODO Auto-generated method stub
            boolean b = true;
            if(b == true){
                tv1.setText("true");
                b2.setEnabled(false);
                b = false;

            } else

                if(b == false){
                b2.setEnabled(true);
                b = true;
                tv1.setText("false");

正如你所看到的那样,当我点击一个按钮时,它会检查变量“b”是真还是假,然后它应该执行以下代码。但事实并非如此!它只对“if b == true”执行操作。你能救我吗?

5 个答案:

答案 0 :(得分:4)

可能因为b在此声明后总是如此:

boolean b = true;

另外,b是一个布尔值,你可以简单地写:

if (b) {
//
} else {
//
}

这可能会按预期工作(未经测试):

b1.setOnClickListener(new View.OnClickListener() {

    private boolean b = true;

    public void onClick(View arg0) {
        // TODO Auto-generated method stub
        if(b){
            b2.setEnabled(false);
            tv1.setText("true");
        } else {
            b2.setEnabled(true);
            tv1.setText("false");
        }

        b = !b; //this changes b from true to false and vice versa at each call
    }
   });

答案 1 :(得分:1)

您必须在监听器

之外声明变量b
boolean b = true;
b1.setOnClickListener(new View.OnClickListener() {
        public void onClick(View arg0) {
            // TODO Auto-generated method stub
            if(b == true){
                tv1.setText("true");
                b2.setEnabled(false);
                b = false;

            } else

                if(b == false){
                b2.setEnabled(true);
                b = true;
                tv1.setText("false");

答案 2 :(得分:1)

变量'b'是方法范围内的局部变量,因此当onClick()方法执行时它始终为true。您需要将变量移动到类范围中。像这样:

b1.setOnClickListener(new View.OnClickListener() {

    boolean b = true;

    public void onClick(View arg0) {
        if (b) {
            tv1.setText("true");
            b2.setEnabled(false);
            b = false;

        } else {
            b2.setEnabled(true);
            b = true;
            tv1.setText("false");
        }
    }

});

答案 3 :(得分:0)

你想使用static修饰符来保持变量的状态(因为当它超出范围时它的状态不会被保留。)这也意味着你必须将变量移到a全球范围。

答案 4 :(得分:0)

从你提出的代码中,这就是我能想到的原因:

最初,您的b变量设置为true。因此,它进入b == true条件。

但是当你将b==false“设置在内部”时,如果它不会转到其他地方。原因很简单,因为当你已经转到“if”语句时,这是if语句被验证为真的条件,计算机不需要查找“else”语句,因此不会进入它。

如果你有两个连续的ifs而不是别的,你的东西会按照你期望的方式运作。