这很好用

if ((a >= 40 && a <= 50) || (a >= 60 && a <= 80))
// do something

我该如何反过来?

if ((a < 40 && a > 50) || (a < 60 && a > 80))
// do something

代码无法按预期工作。如果没有(条件)

,我想要
有帮助吗?

解决方案

您可能需要查看 De Morgan的法律

1. !((a >= 40 && a <= 50) || (a >= 60 && a <= 80))

2. (!(a >= 40 && a <= 50) && !(a >= 60 && a <= 80))

3. ((!(a >= 40) || !(a <= 50)) && (!(a >= 60) || !(a <= 80))

4. ((a < 40 || a > 50) && (a < 60 || a > 80))


or in other words: (a < 40 || (50 < a && a < 60) || 80 < a)

其他提示

if ((a < 40 || a > 50) && (a < 60 || a > 80))
// do something

虽然我建议弄清楚如何使其正常工作(通过重写)

if (!((a >= 40 && a <= 50) || (a >= 60 && a <= 80)))

我应该相信。

您需要“或”

if ((a < 40 || a > 50) && (a < 60 || a > 80))

或者,NOT

if (!((a >= 40 && a <= 50) || (a >= 60 && a <= 80)))

你的第二个例子

if ((a < 40 && a > 50) || (a < 60 && a > 80))

没有意义,因为 a 不能同时小于40且大于50(或小于60且大于80)。

这样的东西
if (!((a < 40 && a > 50) || (a < 60 && a > 80)))

if ((a < 40 || a > 50) && (a < 60 || a > 80))
if (!((a >= 40 && a <= 50) || (a >= 60 && a <= 80)))

假设你想要相当于

if ( not ((a >= 40 && a <= 50) || (a >= 60 && a <= 80)) )

然后,如果你考虑原始表达式,它应该是

if (a < 40 || (a > 50 && a < 60) || a > 80)

第一个表达式允许 a 为40到50或60到80之间的数字。用英语取消,你想要一个小于40的数字或50至60或大于80。

De Morgan的定律可以为您提供准确的答案,但我更喜欢您可以大声朗读并理解的代码。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top