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

4

7 回答 7

4

这应该适合你:

if( !a || !b ) {
  doSomething();
}
于 2013-01-24T04:35:44.733 回答
4
if(!(a && b)) {  
  ....Then do something 
}
于 2013-01-24T04:37:07.853 回答
1

(时间太长,逻辑崩溃)

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

也就是说,给定:

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

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

再次申请 DM:

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

现在使用“^ 在 v 上的分布”x = a && 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

当然,一个简单的真值表可能更容易显示这一点..

于 2013-01-24T04:51:54.370 回答
1

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

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

祝一切顺利。

于 2013-01-24T07:01:51.177 回答
0

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

if (!a || !b) { .... }
于 2013-01-24T04:35:19.197 回答
0

通过检查一个是假的还是两个都是假的,你可以确保两者都是真的,或者a && b。的反面a && b!a || !b

if (!a || !b) {
    doSomethingElse();
}
于 2013-01-24T04:36:23.480 回答
0
if (!(a && b)) {
    doSomethingElse();
}
于 2013-01-24T04:40:57.320 回答