【问题标题】:What Is A Simple Way To Fix These Booleans?修复这些布尔值的简单方法是什么?
【发布时间】:2013-01-24 04:32:45
【问题描述】:
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 语句中做到这一点,但我只是想知道是否有一种简单的方法来实现它。

【问题讨论】:

  • 您是否将布尔值设置为 false?因为它正在检查它们是否为假,并且看起来您已将它们设置为真?
  • @JoseSwagKid :你的意思是如果其中一个是假的调用 doSomething() ,否则调用 doSomethingElse() ??????
  • 保持简单:如果至少有一个布尔值是假的(所以其中一个或两个) - 应该调用 doSomethingElse - 我希望它更清楚。
  • 因为所有的答案都是(!a || !b)!(a &amp;&amp; b),现在似乎是时候链接到DeMorgan's Laws 来解释为什么这两个语句是等价的

标签: java boolean logic


【解决方案1】:

这应该适合你:

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

【讨论】:

    【解决方案2】:
    if(!(a && b)) {  
      ....Then do something 
    }
    

    【讨论】:

    • 这不起作用。 if 语句应该起作用:如果至少有一个布尔值是假的
    • 是的,它确实有效。如果布尔值之一为假,则 (a && b) 将为假。否定使它成为真的。因此 if 语句检查是否至少有一个布尔值是假的
    • 抱歉,我在代码中发现了另一个错误,导致此代码无法正常工作。干得好!
    【解决方案3】:

    (时间太长,逻辑崩溃)

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

    也就是说,给定:

    1. (!a || !b)(由 DM)-> !(a &amp;&amp; b)
    2. (!a &amp;&amp; !b)(由 DM)-> !(a || b)

    然后(!a || !b) || (!a &amp;&amp; !b)(通过替换)-> !(a &amp;&amp; b) || !(a || b)

    再次申请 DM:

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

    现在使用"distributivity of ^ over v" (x = a &amp;&amp; b; y = a; z = b):

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

    并通过“关联性”和“交流性”:

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

    并通过“幂等性”:

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

    简化:

    !(a && b)
    

    由 DM 返回:

    !a || !b
    

    当然,一个简单的Truth Table 可能更容易显示这个..

    【讨论】:

      【解决方案4】:

      您的 if 语句将起作用,只需将您的 if 语句更改为:

      如果 (!a || !b) { } 正如您在上面看到的,当任何一个布尔值为 false 时,它​​都会起作用。

      一切顺利。

      【讨论】:

        【解决方案5】:

        您提出的解决方案可以简化为...

        if (!a || !b) { .... }
        

        【讨论】:

          【解决方案6】:

          通过检查一个是假的还是两个都是假的,你可以确保两个都是真的,或者a &amp;&amp; ba &amp;&amp; b的反义词是!a || !b

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

          【讨论】:

            【解决方案7】:
            if (!(a && b)) {
                doSomethingElse();
            }
            

            【讨论】:

              猜你喜欢
              • 2016-01-08
              • 2011-01-14
              • 1970-01-01
              • 2014-05-17
              • 2011-04-23
              • 1970-01-01
              • 2021-12-31
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多