Java 中的布尔逻辑

Boolean Logic in Java

我在布尔逻辑中遇到了一个问题,您必须为三个变量中的每一个分配布尔值,从而使每个方程式彼此不相等。

问题说明:

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

我试过用猜测和检查的方法来解决这个问题,但我还没有成功。有没有办法用代数方法解决这个问题?我在 Java.

工作

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

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

也就是说,不存在这样的组合,因为两者在逻辑上是等价的

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

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

将它们应用到右侧:

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

解决此类问题的一个非常简单的方法通常是检查公式中似乎最 "powerful" 的值。在这里我会说是 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

所以这永远无法实现。