简单布尔逻辑

时间:2020-10-19 19:51:06

标签: java boolean boolean-logic boolean-operations

我正在尝试确定以下表达式的条件,其中ab被正确声明为布尔变量,其结果为false

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

对我来说,这个表达式似乎总是会为true。如果abfalse,则相等运算符的两端将求值为false。如果ab都为真,则双方都将评估为真。以上就是所有选项,这是我在线作业的正确答案。但是,当我使用Java 11 JVM在IntelliJ CE中运行此命令时,似乎b为false时它打印为false: when a and b are both false, IntelliJ outputs false

当b为假而a为真时,我得到相同的输出。有人可以解释我的逻辑错误在哪里吗?非常感谢。

3 个答案:

答案 0 :(得分:3)

我认为与Array相比,==的操作优先级

尝试一下-

&&

答案 1 :(得分:2)

您的代码应为:

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

否则将其评估为:

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

答案 2 :(得分:-1)

布尔运算具有等效的数学运算(这是CPU最终要做的事情)。您可以使用此方法检查任何方程式,以确保方程式如您所愿。 它可以帮助您快速查看布尔逻辑在所有情况下是否正确。

在这里使用您的方程式是一个示例:

将“ true”替换为1,将“ false”替换为0。将&&替换为*(如乘数)和||。用+(如添加)。 !仍然按照您的期望进行。然后检查是否相等 所以

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

然后当a =假(0)和b =假(0)时

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?

不正确(错误)。

在最后的测试中,我们可以看到该方程式并不总是等于true。就像在数学中一样,布尔运算具有一定的运算顺序(很多其他人都提到过),但是我喜欢使用这种方法来确保方程式按预期工作。