質問
これは正常に動作します
if ((a >= 40 && a <= 50) || (a >= 60 && a <= 80))
// do something
その逆を行うにはどうすればよいですか
if ((a < 40 && a > 50) || (a < 60 && a > 80))
// do something
コードは期待どおりに機能しません。 if not(condition)
のようなものが欲しい解決
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)))
動作するはずです。
&quot; OR&quot;が必要です
if ((a < 40 || a > 50) && (a < 60 || a > 80))
または、NOT
if (!((a >= 40 && a <= 50) || (a >= 60 && a <= 80)))
2番目の例
if ((a < 40 && a > 50) || (a < 60 && a > 80))
a 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の法則は正確な答えを得ることができますが、読み上げて理解できるコードが好きです。
所属していません StackOverflow