2011-09-21 3 views
0

자바에서 두 개의 부울 변수를 프로그래밍하고 싶습니다.이 두 변수는 항상 거짓이고 하나는 참이라는 식으로 중첩됩니다. 따라서 하나를 true로 설정하면 다른 하나는 자동으로 false로 변경됩니다.Java에서 두 개의 부울 변수

+11

'Boolean'과 논리 부정이 필요합니다. –

답변

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 동의 함. 이는 또한 업데이트 이상으로 인한 잠재적 인 문제를 해결합니다. 컨텍스트에 따라 다르긴하지만, 두 번째 방법 인 isDead()를 사용하는 대신 외장 코드가 아마도 isAlive()와! isAlive() '(개념적 청결도를 지적하면서 대답하는 것은 잘못된 것이 아닙니다.) –

+0

@ X-Zero 전적으로 동의합니다. 그러나 isDead() 메소드가 청결을 목적으로 많이 사용된다면 어떻게 유익한지를 알 수있었습니다. 게다가, 당신은 죽은 것이 아닌 살아있는 것 (좀비 같은 것?)을 동시에 가질 이유가 있습니다. 하나의 위치에 "dead alive not alive"로직을 넣으면 나중에 변경 사항을 통합합니다. 그래서 예, 전적으로 전적으로 상황에 달려 있다는 것에 동의합니다. – 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 개의 부울이 항상 상반되는 경우, 2 개의 부울을 기반으로 의사 결정을하는 대신 1 개의 부울을 가지고 결정을 내리는 것이 어떻습니까?

3

로직을 관리하기 위해 setter 및 getter를 사용하십시오.

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# 클래스 필드의 표준입니다. 나는 자바에 대해 잘 모르겠습니다. –

+0

'mbBool1'에서'm'을 단순히 대체 한 것처럼 보입니다. 하지만 그건 단지 나야 ... 나는 그걸 위해 DV를하지 않았다. :) – corsiKa

0

: 나는 또한 당신이 유일한 방법으로 하나 개의 필드, 인 flag1 필요 의심이 아닌 Boolean

boolean을 원하는 의심

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

... 

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

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

두 개의 변수 대신에 !myVar을 사용하십시오. 원하는 경우이 기능을 사용할 수 있습니다.

관련 문제