什么是解决这些布尔人的简单方法?

时间:2013-01-24 04:32:46

标签: java boolean logic

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语句中做到这一点,但我只是想知道是否有一种简单的方法来实现它。

7 个答案:

答案 0 :(得分:4)

这应该适合你:

if( !a || !b ) {
  doSomething();
}

答案 1 :(得分:4)

if(!(a && b)) {  
  ....Then do something 
}

答案 2 :(得分:1)

(太多时间,逻辑崩溃)

首先应用De Morgan's来获取外部的! :(虽然可以在此阶段应用其他布尔代数跳过几个步骤,但我想表明这一点。)

即,给定:

  1. (!a || !b)(由DM提供) - &gt; !(a && b)
  2. (!a && !b)(由DM提供) - &gt; !(a || b)
  3. 然后(!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();
}