微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

简单布尔逻辑

如何解决简单布尔逻辑

我正在尝试确定以下表达式的条件,其中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为真时,我得到相同的输出。有人可以解释我的逻辑错误在哪里吗?非常感谢。

解决方法

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

尝试一下-

&&
,

您的代码应为:

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

否则将其评估为:

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

布尔运算具有等效的数学运算(这是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。就像在数学中一样,布尔运算具有一定的运算顺序(很多其他人都提到过),但是我喜欢使用这种方法来确保方程式按预期工作。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。