Java 找出两个变量是真是假的更好方法

Java 找出两个变量是真是假的更好方法,java,boolean-logic,Java,Boolean Logic,我有两个变量,可以是真的,也可以是假的。我通过查询数据库中是否存在某些产品ID来获取这些信息 现在我需要设置另一个变量,它将是true或false。当两个变量都为真或都为假时,它将为真值。一个值为真,另一个值为假 目前我使用if语句来处理它 if ( v1 == true && v2 == true ) result = true; else if ( v1==false && v2 == false ) result = true; else if ( v1

我有两个变量,可以是真的,也可以是假的。我通过查询数据库中是否存在某些产品ID来获取这些信息

现在我需要设置另一个变量,它将是true或false。当两个变量都为真或都为假时,它将为真值。一个值为真,另一个值为假

目前我使用if语句来处理它

if ( v1 == true && v2 == true )
 result = true;
else if ( v1==false && v2 == false )
 result = true;
else if ( v1 == true && v2 == false )
 result = false;
else if ( v1==false && v2 == true )
 result = false;

有更好的方法吗?

您可以将逻辑异或运算符和逻辑非运算符用作:

result = !(v1^v2);

我可能遗漏了一些非常基本的东西,但我会试一试:

result = ( v1 == v2 );
使用XOR运算符(^):


为什么不把两者比较一下呢

if(v1 == v2) result = true;

简单的方法是,如果两个变量相等,那么它应该为真,如果任何一个为假,那么它就是假。 看看这个

if(v1 == v2)
    return true;
else 
    return false;

这类问题,在给定真值表的情况下,尽可能减少再现真值所需的逻辑,通常得到很好的处理

这里的真值表如下所示:

v1 v2 f(v1, v2) t t t t f f f t f f f t v2 f t --------- v f| t | f | 1 t| f | t | --------- v1v2f(v1,v2) t t t t f f f t f f f t 事实上,正如其他人所指出的,考虑到真值表,对逻辑的基本熟悉应该会立即产生函数

但是,如果将真值表绘制为卡诺图,它看起来像:

v1 v2 f(v1, v2) t t t t f f f t f f f t v2 f t --------- v f| t | f | 1 t| f | t | --------- v2 f t --------- v f | t | f| 1 t | f | t| --------- 函数看起来像:!v1!v2 | | v1v2如果你再看一次,可以看到它简化为

不可否认,2变量卡诺图可能最好用普通的逻辑运算来处理,即熟悉和记忆。但是当扩展到2个变量之外时,卡诺图非常有启发性——你应该研究它们


这比必要的更复杂,请参见DXM的答案。如果(variable==true)是一个非常著名的反模式,顺便说一句:)@IlyaSmagin-为什么它是一个反模式?有趣的升级解决方案选择,我倾向于认为结果=!(v1-xor-v2)比result=(v1==v2)更清楚。我礼貌地建议您多喝点咖啡……如果您发现
!(a^b)
要比
a==b更清楚,那么你一定还在睡觉。实际上,这些括号甚至是可选的,因为赋值操作符在所有这些语言中的优先级最低,如java、C++,C.What与java相关的答案,与布尔代数有关,接收到许多的赞成票(参见)。D+1:lol,当我第一次阅读这个问题时,我认为它可能是一个XOR问题,但这使它变得简单明了。@Benoit对于编译器来说是可选的,但是我们程序员经常忘记编译器规则@贝诺特,你刚才是不是和我们在一起P