boolean a = true
boolean b = true
<random code in here, booleans may or may not change>
if ((!a || !b) || (!a && !b)){
doSomethingElse();
}
此代码对我不起作用,这个问题的简单解决方案是什么?
要明确: if语句应该有效: 如果至少有一个布尔值是假的
3例:
a = False b = True
a = True b = False
a = False b = False
我可以在一个很长的if语句中做到这一点,但我只是想知道是否有一种简单的方法来实现它。
答案 0 :(得分:4)
这应该适合你:
if( !a || !b ) {
doSomething();
}
答案 1 :(得分:4)
if(!(a && b)) {
....Then do something
}
答案 2 :(得分:1)
(太多时间,逻辑崩溃)
首先应用De Morgan's来获取外部的!
:(虽然可以在此阶段应用其他布尔代数跳过几个步骤,但我想表明这一点。)
即,给定:
(!a || !b)
(由DM提供) - &gt; !(a && b)
和(!a && !b)
(由DM提供) - &gt; !(a || b)
。然后(!a || !b) || (!a && !b)
(通过替换) - &gt; !(a && b) || !(a || b)
。
再次申请DM:
!( (a && b) && (a || b) )
现在使用"distributivity of ^ over v"(x = a && b; y = a; z = b
):
!( ((a && b) && a) || ((a && b) && b) )
通过“结合”和“沟通”:
!( (a && a && b) || (a && b && b) )
并通过“idempotence”:
!( (a && b) || (a && b) )
!( (a && b) )
简化为:
!(a && b)
回到DM:
!a || !b
当然,简单的Truth Table可能更容易显示出来......
答案 3 :(得分:1)
你的if语句只会改变你的if语句:
if(!a ||!b){ } 如上所示,当布尔值中的任何一个为假时,它将起作用。
All the Best。
答案 4 :(得分:0)
您建议的解决方案可以简化为......
if (!a || !b) { .... }
答案 5 :(得分:0)
通过检查一个是否为假或两者都是假,您确保两者都为真,或a && b
。与a && b
相反的是!a || !b
:
if (!a || !b) {
doSomethingElse();
}
答案 6 :(得分:0)
if (!(a && b)) {
doSomethingElse();
}