Вопрос
Это работает нормально
if ((a >= 40 && a <= 50) || (a >= 60 && a <= 80))
// do something
Как мне сделать обратное?
if ((a < 40 && a > 50) || (a < 60 && a > 80))
// do something
Код работает не так, как ожидалось.Я хочу что-то вроде если нет (условие)
Решение
Возможно, вы захотите взглянуть на законы де Моргана .
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))
Или НЕ
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.
Законы де Моргана могут дать вам точный ответ, но я предпочитаю код, который вы можете прочитать вслух и понять.