【问题标题】:How do I negate this logical expression?我如何否定这个逻辑表达式?
【发布时间】:2018-11-14 03:18:11
【问题描述】:

所以,现在我的代码是这样的:

if(DateA <= utcNow || (DateA == null && DateB <= utcNow)) doSomething();

我现在想做这样的事情:

if(!InitialExpression) continue;

AFAIK,如果A || B,否定将是!A &amp;&amp; !B。 但这不起作用:if(DateA &gt; utcNow &amp;&amp; (DateA != null || DateB &gt; utcNow)) continue;。 当DateA = nullDateB &gt; utcNow 应该属于 continue 但它不会。

编辑:

我的错误是假设DateA &lt;= utcNow 的反义词是DateA &gt; utcNow。但它是DateA == null || DateA &gt; utcNow

【问题讨论】:

  • 您在寻找else吗?如if (thiscondition) dothis else dothat?
  • 查看德摩根定律
  • @MitchelPaulin 谢谢!我知道这条定律,但是当我查看维恩图时,我意识到我的错误。查看有问题的编辑

标签: logic logical-operators boolean-logic


【解决方案1】:
  • 选项 1 - 使用 ELSE 语句

if(DateA <= utcNow || (DateA == null && DateB <= utcNow)) {doSomething() }else{ dpSomethingElse();

  • 选项 2 - 在运算符中使用 !

if(!(DateA &lt;= utcNow || (DateA == null &amp;&amp; DateB &lt;= utcNow))) doSomethingElse();

  • 选项 3 - 否定 - DataA 不为空的条件需要先执行。缺少一些上下文,但假设您想通过确保优先选择 DateA(如果它大于 utcNow)来否定表达式,否则检查 DateB 是否大于 utcNow

if((DateA != null &amp;&amp; DateA &gt; utcNow) || DateB &gt; utcNow) doSomethingElse()

【讨论】:

    【解决方案2】:

    DateA &lt;= utcNow || (DateA == null &amp;&amp; DateB &lt;= utcNow)的反义词是

    (DateA == null || DateA > utcNow) && (DateA != null || DateB == null || DateB > utcNow)
    

    【讨论】:

      【解决方案3】:

      @Felipe 你的逻辑非常好。只是你忽略了一个小方面。 &lt;= 的否定不仅是 &gt;,而且还包括 NULL 值。只需添加这两个条件以及 OR 运算符。这应该可以。

      检查下面的更新声明:

      (DateA == null || DateA > utcNow) && (DateA != null || DateB == null || DateB > utcNow)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-01-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-05-07
        • 1970-01-01
        相关资源
        最近更新 更多