如何解决简单布尔逻辑
我正在尝试确定以下表达式的条件,其中a
和b
被正确声明为布尔变量,其结果为false
:
(a && (b || !a)) == a && b
对我来说,这个表达式似乎总是会为true。如果a
或b
为false
,则相等运算符的两端将求值为false
。如果a
和b
都为真,则双方都将评估为真。以上就是所有选项,这是我在线作业的正确答案。但是,当我使用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 举报,一经查实,本站将立刻删除。