2011-09-21 39 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相反,而不是有兩個變量。如果你想的話,這可以是一個功能。