简单布尔逻辑



我正试图确定以下表达式(其中ab是正确声明的布尔变量(计算为false:的条件

(a && (b || !a)) == a && b

对我来说,这个表达似乎永远都是正确的。如果ab中的任何一个是false,则等式运算符的两边都将求值为false。如果ab都为真,那么双方都将评估为真。这就是所有的选项,这是我在线作业的正确答案。然而,当我在带有Java 11 JVM的IntelliJ CE中运行此程序时,每当b为false时,它似乎都会打印false:当a和b都为假时,IntelliJ输出假

当b为false,a为true时,我得到相同的输出。有人能解释一下我逻辑的错误在哪里吗?非常感谢。

我认为==操作优先于&&

试试这个-

(a && (b || !a)) == (a && b)

您的代码应该是:

boolean c = (a && (b || !a)) == (a && b);

否则评估为:

boolean c = ((a && (b || !a)) == a) && b;

布尔运算具有等效的数学运算(这是CPU最终要做的(。你可以使用这个方法来检查任何方程,以确保它是按照你的预期得出的。它可以帮助您快速查看布尔逻辑是否适用于所有情况。

使用你的方程式这里是一个例子:

替换";真";其中1和";false";具有0。替换&带*(如乘法(和||带+(如加法(!做你期望的事。然后检查相等性所以

a*(b+!a) == a*b

然后当a=false(0(和b=false(O(时,我们有

0*(0+1) == 0*0
or  0=0

这是真的。

我们可以继续使用其他选项进行检查。

a=1,b=1

1*(1+0) == 1*1
or 1=1

再说一遍,真正的

a=1,b=0

1*(0+1) == 1*0
1*1=0?

不正确(错误(。

通过最后一次测试,我们可以看到这个方程并不总是正确的。就像在数学中一样,布尔运算有一个运算顺序(正如许多其他人所提到的(,但我喜欢使用这种方法来确保我的方程按预期工作。

相关内容

  • 没有找到相关文章

最新更新