質問

これは正常に動作します

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の法則は正確な答えを得ることができますが、読み上げて理解できるコードが好きです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top