更好的方法来查找两个变量是否为真或两者都是错误的

use*_*737 20 java boolean-logic

我有两个变量,可以是true或false.我通过在数据库上查询某些产品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;
Run Code Online (Sandbox Code Playgroud)

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

DXM*_*DXM 118

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

result = ( v1 == v2 );
Run Code Online (Sandbox Code Playgroud)

  • 实际上括号在这里是可选的,因为赋值运算符在Java,C++,C等语言中几乎具有最低优先级. (10认同)
  • 与什么有关接收这么多upvotes布尔Java的答案是最高(也http://stackoverflow.com/questions/3907384/whats-the-most-concise-way-to-get-the-inverse-of-a-java见 - 布尔值/ 3907396#3907396)?:d (5认同)
  • +1:大声笑,当我第一次阅读这个问题时,我认为这可能是一个 XOR 问题,但这使它变得简单明了。 (3认同)

cod*_*ict 13

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

result = !(v1^v2);
Run Code Online (Sandbox Code Playgroud)

  • 这比必要的更复杂,请参阅DXM的答案. (3认同)

Jer*_*her 5

在给定真值表的情况下,使用卡诺图Karnaugh Maps)通常会很好地解决此类问题,从而使重现真值所需的逻辑最小

您的真值表如下所示:

 v1 v2 f(v1,v2)
  ttt
  tff
  英尺英尺
  英尺

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

但是,如果您使用真值表并将其绘制为卡诺地图,则它看起来像:

        v2
       英尺 
     ---------
 vf | t | f |
 1吨| f | t |
     ---------

函数看起来像:!v1!v2 || v1v2如果您再次查看2个变量karnaugh映射示例,可以将其简化为!异或

诚然,最好通过熟悉,熟悉和记忆,用普通的逻辑运算最好地处理2个变量卡诺图。但是当扩展超过2个变量时,卡诺地图非常有启发性-您应该研究它们。

  • 我礼貌地建议您多喝点咖啡...如果您发现`!(a ^ b)`比`a == b`更清晰,那么您仍然必须处于睡眠状态。还有一场噩梦。 (22认同)
  • 有趣的赞成解决方案选择,我倾向于认为 result = !(v1 xor v2) 比 result = (v1 == v2) 更清晰。 (2认同)