【发布时间】:2011-11-22 05:57:33
【问题描述】:
我想在 java 中编写两个布尔变量,它们相互关联,一个始终为假,一个始终为真。因此,如果您将其中一个设置为 true,则另一个将自动更改为 false。
【问题讨论】:
-
听起来你需要一个
Boolean和一个逻辑否定......
我想在 java 中编写两个布尔变量,它们相互关联,一个始终为假,一个始终为真。因此,如果您将其中一个设置为 true,则另一个将自动更改为 false。
【问题讨论】:
Boolean 和一个逻辑否定......
不要使用变量 - 使用方法。
使用变量之前
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;
}
}
【讨论】:
After 基本上就是我要回答的内容。
isAlive()和!isAlive(),而不是第二种方法isDead()(你的没有什么问题回答,只是指出概念上的清洁度)。
isDead() 方法如果仅出于清洁目的而大量使用,它将是多么有益。此外,将来你可能有理由同时拥有既不死也不活的东西(比如僵尸状态?)。通过将“死亡意味着不活着”的逻辑放在一个位置,您可以巩固变化以备后用。所以是的,我完全同意这完全取决于上下文。
使用 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 ;}
}
【讨论】:
mbBool1 中的m。但这只是我……我并没有真正为它做 DV :)
使用智能设置器
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 个布尔值做出决策?
【讨论】:
我怀疑你想要boolean 而不是Boolean
我还怀疑你只需要一个字段,flag1 和一个方法
public boolean getFlag2() {
return !flag1;
}
【讨论】:
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
【讨论】:
你只能使用一个布尔变量:
boolean flag = true;
/*
flag is true
!flag is false
*/
...
flag = false;
/*
flag is false
!flag is true
*/
【讨论】:
用!myVar 得到相反的结果,而不是有两个变量。如果你愿意,这可以在一个函数中。
【讨论】: