Java中的布尔逻辑

时间:2015-01-14 15:24:27

标签: java boolean-logic

我在布尔逻辑中遇到了一个问题,你必须在这三个变量中为每个变量分配布尔值,因此每个方程都不相等。

问题指明:

!b && (c || !d) != !(b || !c && d)

我尝试用猜测和检查方法解决问题,但我还没有运气。有没有办法以代数方式解决问题?我在Java工作。

3 个答案:

答案 0 :(得分:3)

这是一个棘手的问题。在应用双重否定之后,考虑将De Morgan定律应用于左侧的表达式:

!!(!b && (c || !d))
!(b || !(c || !d))
!(b || !c && d)

换句话说,没有这样的组合,因为两者在逻辑上是等价的。

答案 1 :(得分:2)

解决这类问题的一个非常简单的方法通常是检查公式,看看哪个似乎是最“强大”的价值。我要说的是b。 因此,让我们通过b == trueb == false

来查看示例

首先,让我们添加一些括号,以便明确是什么:

  !b && (c || !d) != !(b || !c && d)
= (!b && (c || !d)) != !(b || (!c && d))

如果b == true则:

   (!true && (c || !d)) != !(true || (!c && d))
=> (false && (c || !d)) != !(true || (!c && d))
=> false != !true
=> false != false
=> false

如果b == false那么:

   (!false && (c || !d)) != !(false || (!c && d))
=> (true && (c || !d)) != !(!c && d)
=> (c || !d) != (c || !d)
=> false

所以这永远无法实现。

答案 2 :(得分:1)

您可以使用布尔逻辑的一些规则:

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

将它们应用到右侧:

!(b || !c && d) = !b && !(!c && d) = !b && (c || !d)