可以简化以下表达式吗?
(M == null && C == null) ||
(M != null && C != null && D == C)
在数学上我知道这不能简化,我检查了WolframAlpha以确认这一点,但我想知道是否可以使用其中一个布尔逻辑运算符(&,|,^)来制作那个条件更短。我试着想办法,但我有精神障碍......这实际上有可能缩短吗?
答案 0 :(得分:2)
根据2'规则',建议的表达式是正确的: 规则#1:无论D的值如何,M和C都为空 规则#2:(2.a:M和C都不为空)AND(2.b:D等于C)
如果D为空,则Shingetsu的公式将失败(意味着C == null,这违反了规则#2a)
测试失败:M =不(null),C = null,D = null
(M == null && C == null) || (M != null && D == C)
false && true || true && true
false || true
true
虽然杰克的原始提议表达式将被解析为:
(M == null && C == null) || (M != null && C != null && D == C)
false && true || (true && false && true)
false || false
false
学家在M或C的情况下,Bruni的公式将失败!= null(破坏条件1或2a) 测试失败:M =不(null),C = null,D = null
((M == null) && (C == null)) || (D == C)
false && true || true
false || true
true
答案 1 :(得分:2)
不,它不能缩短。
正如Ferdinand Liu所观察到的,在两种情况下你的表达是正确的:
M
和C
都为空,或M
和C
不为空,C
和D
相等。您需要在两个条件中同时检查M
和C
,这样就无法简化表达式。
有趣但只有轻微相关的说明:
如果您不需要检查C
和D
是否相等,那么表达式将是
(M != null && C != null) || (M == null && C == null)
此可以简化为
!((M == null) ^ (C == null))
当M
和C
具有相同的“null-ness”时,这是真的。
答案 2 :(得分:0)
如果你假设D不是null,那么在第二个表达式中你可以省略C!== null。
答案 3 :(得分:0)
(M == null&& C == null)|| (M!= null&& D == C)
这可以做到,因为从我在你的代码中看到的,D明确地有一个值,所以如果它是null,则C不会是==到D.