更好的方法来确定两个变量是真还是两个变量都为假

Better ways to find if both variables are true or both are false

提问人:user679737 提问时间:3/28/2011 最后编辑:jzduser679737 更新时间:8/14/2012 访问量:30298

问:

我有两个变量,可以是 true 或 false。我通过对数据库进行查询来获取这些产品ID。

现在我需要设置另一个变量,该变量为 true 或 false。当两个变量都为 true 或两个变量都为 false 时,它将是 true 值。这将是一个 false 值,一个是 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;

有没有更好的方法可以做到这一点?

java 逻辑

评论

11赞 Ilya Smagin 3/28/2011
if( variable == true ) 是一个地狱般的反模式,非常有名,顺便说一句:)
0赞 Kyle Delaney 12/24/2019
@IlyaSmagin - 为什么它是反模式?
1赞 Dan Phillips 11/2/2023
@KyleDelaney最好使用 if(variable)。变量为 TRUE/FALSE。运行 variable==true 给出一个 TRUE/FALSE,等于变量

答:

16赞 codaddict 3/28/2011 #1

您可以将逻辑 XOR 运算符和逻辑 NOT 运算符用作:

result = !(v1^v2);

评论

3赞 jmg 3/28/2011
这比必要的要复杂得多,请参阅 DXM 的答案。
157赞 DXM 3/28/2011 #2

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

result = ( v1 == v2 );

评论

10赞 Benoit 3/28/2011
实际上,括号在这里甚至是可选的,因为赋值运算符几乎是 Java、C++、C 等语言中优先级最低的。
5赞 BoltClock 3/28/2011
与布尔值获得如此多赞成票相关的 Java 答案是怎么回事(另请参阅 stackoverflow.com/questions/3907384/...)?:D
3赞 LiuYan 刘研 3/29/2011
+1:哈哈,当我第一次读到这个问题时,我以为它可能是一个异或问题,但这让它变得简单明了。
0赞 corsiKa 3/29/2011
@Benoit编译器是可选的,但是我们程序员经常忘记编译器规则!
0赞 Ruben Bartelink 3/29/2011
@Benoit,你刚才真的是我们吗?:P
2赞 Rune Aamodt 3/28/2011 #3

使用 XOR 运算符 (^):

boolean result = !(v1 ^ v2)
-2赞 vegasaurus 3/28/2011 #4

为什么不直接比较两者呢?

if(v1 == v2) result = true;
-2赞 Troydm 3/28/2011 #5
if(v1 == v2) 
return true; 
else 
return false;
-2赞 sreekanth 3/28/2011 #6

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

if(v1 == v2)
    return true;
else 
    return false;
5赞 Jerry Asher 3/28/2011 #7

这种问题,给定一个真值表,最小化再现真值所需的逻辑,通常用卡诺图就可以很好地处理

此处的真值表如下所示:

 v1 v2  f(v1, v2)
  t  t     t
  t  f     f
  f  t     f
  f  f     t

实际上,正如其他人所指出的,给定真值表,对逻辑的基本熟悉应该立即产生函数!异或

但是,如果您将真值表绘制为 Karnaugh 地图,它看起来像:

        v2
       f   t 
     ---------
 v  f| t | f |
 1  t| f | t |
     ---------

函数如下所示:!v1!v2 ||v1v2 如果您再次查看 2 个变量 Karnaugh 映射示例,可以看出它简化为 !异或

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

评论

2赞 Jerry Asher 3/28/2011
有趣的点赞解决方案选择,我倾向于认为结果 = !(v1 xor v2) 比 result = (v1 == v2) 更清晰。
23赞 Konrad Rudolph 3/28/2011
我礼貌地建议你多喝点咖啡......如果你发现比这更清楚,你一定还在睡觉。还有一场噩梦。!(a ^ b)a == b