Domanda

Funziona bene

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

Come posso fare il contrario?

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

Il codice non funziona come previsto. Voglio qualcosa come in caso contrario (condizione)

È stato utile?

Soluzione

Potresti voler guardare Leggi di 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)

Altri suggerimenti

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

Mentre consiglierei di capire come farlo funzionare correttamente (riscrivendolo)

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

dovrebbe funzionare credo.

È necessario un " OR "

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

Oppure, un NOT

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

Secondo esempio

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

non ha senso in quanto a non può essere sia inferiore a 40 e maggiore di 50 (o inferiore a 60 e maggiore di 80) contemporaneamente.

Qualcosa di simile

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

o

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

Supponendo che desideri l'equivalente di

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

quindi, se pensi all'espressione originale, dovrebbe essere

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

La prima espressione sta permettendo a a di essere un numero da 40 a 50 o da 60 a 80. Negalo in inglese e vuoi un numero inferiore a 40 o tra 50 e 60 o superiore a 80.

Le leggi di De Morgan possono darti una risposta accurata, ma preferisco il codice che puoi leggere ad alta voce e dare un senso.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top