Две логические переменные в Java - PullRequest
0 голосов
/ 21 сентября 2011

Я хотел бы запрограммировать в Java две логические переменные, которые связаны таким образом, что одна всегда ложна, а другая всегда истинна.Таким образом, если вы установите одно значение true, другое автоматически изменится на false.

Ответы [ 7 ]

10 голосов
/ 21 сентября 2011

Не используйте переменные - используйте методы.

Перед использованием переменных

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;
    }
}
3 голосов
/ 21 сентября 2011

Используйте сеттеры и геттеры для управления логикой для вас.

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 ;}
}
2 голосов
/ 21 сентября 2011

используйте умные сеттеры

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 логических выражений?

1 голос
/ 21 сентября 2011

Я подозреваю, что вы хотите boolean, а не Boolean

Я также подозреваю, что вам нужно только одно поле, flag1 с методом

 public boolean getFlag2() {
      return !flag1;
 }        
0 голосов
/ 22 сентября 2011

Просто получите противоположное с !myVar вместо двух переменных.Это может быть функция, если хотите.

0 голосов
/ 21 сентября 2011

вы можете использовать только одну логическую переменную:

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

...

flag = false;
/*
flag is false
!flag is true
*/
0 голосов
/ 21 сентября 2011
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
...