2011-09-21 88 views
0

我想在java中编程两个布尔变量,这两个布尔变量是以某种方式相互关联的方式,即一个总是假的,一个总是正确的。因此,如果您将其中一个设置为true,另一个会自动更改为false。在Java中的两个布尔变量

+11

听起来像你需要一个'布尔'和一个逻辑否定... –

回答

10

请勿使用变量 - 使用方法。使用逻辑单件的数据(这是你真正拥有)及使用方法:

使用变量

class Before { 
    boolean first; 
    boolean second; 

    boolean setFirst(boolean newValue) { 
     first = newValue; 
     second = !first; 
    } 

    boolean setSecond(boolean newValue) { 
     second = newValue; 
     first = !second; 
    } 
} 

使这个像这样更好了。

class After { 
    private boolean value; 

    boolean first() { 
     return value; 
    } 

    boolean second() { 
     return !value; 
    } 
} 
+0

+1因为你的'After'本质上就是我要回答的问题。 – Dylan

+0

+1同意。这也解决了更新异常的潜在问题。虽然取决于上下文,但他并不一定需要第二种方法 - 例如,外部代码应该更关注“isAlive()”和“!isAlive()”,而不是第二个方法isDead() '(你的回答没有错,只是指出了概念清洁)。 –

+0

@ X-Zero我完全同意。然而,如果仅仅为了清洁目的而使用'isDead()'方法,那么我可以看到它是多么有益。此外,你可能有理由同时拥有一些既未死又不活(如僵尸状态)的未来。通过将“死亡意味着没有活着”的逻辑放在一个位置,您可以稍后合并更改。所以是的,我完全同意它完全取决于上下文。 – corsiKa

0
public class Opposites { 
    protected boolean x = true; 
    protected boolean y = false; 
    public boolean getX() { return x; } 
    public boolean getY() { return y; } 
    public boolean toggle() { x=!x; y=!y; } 
} 

Opposites o = new Opposites(); 
o.getX(); // => true 
o.getY(); // => false 
o.toggle(); 
o.getX(); // => false 
o.getY(); // => true 
2

使用智能制定者

class Blah { 
    private bool1 = true; 
    private bool2 = false; 


    setBool1(val) { 
     this.bool1 = val; 
     this.bool2 = !val; 
    } 

    setBool2(val) { 
     this.bool2 = val; 
     this.bool1 = !val; 
    } 

    // more setters/getters 

} 

注意到我不知道你是否真的需要这一点。如果2个布尔变量总是相反的,那么为什么不只有1个布尔变量,并根据它做出决定,而不是根据2个布尔做出决定?

3

使用setters和getters来为您管理逻辑。

class Foo{ 

    private boolean _bool1; 
    private boolean _bool2; 

    public void setBool1(boolean value) 
    { 
     _bool1 = value; 
     _bool2 = !value; 
    } 

    public void setBool2(boolean value) 
    { 
     _bool2 = value; 
     _bool1 = !value; 
    } 

    public boolean getBool1() { return _bool1 ;} 

    public boolean getBool2() { return _bool2 ;} 
} 
+1

我可以-1成员变量的匈牙利符号? : - { – corsiKa

+0

@glowcoder匈牙利符号会像bBool1和bBool2。 _memberName是有点c#类字段的标准。我对Java不太确定。 –

+0

它似乎只是mbBool1中'm'的替代品。但那只是我......我并没有真正的DV :) – corsiKa

0

,你可以只用一个布尔变量:

boolean flag = true; 
/* 
flag is true 
!flag is false 
*/ 

... 

flag = false; 
/* 
flag is false 
!flag is true 
*/ 
1

我怀疑你想boolean而不是Boolean

我也怀疑你只需要一个字段,FLAG1与方法

public boolean getFlag2() { 
     return !flag1; 
}   
0

只是得到与!myVar相反,而不是有两个变量。如果你想的话,这可以是一个功能。