Question

Cela fonctionne bien

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

Comment puis-je faire l'inverse?

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

Le code ne fonctionne pas comme prévu. Je veux quelque chose comme sinon (condition)

Était-ce utile?

La solution

Vous pouvez consulter les lois de 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)

Autres conseils

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

Bien que je vous recommande de déterminer comment le faire fonctionner correctement (en le réécrivant)

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

devrait fonctionner, je crois.

Vous avez besoin d'un "OU"

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

Ou bien, PAS

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

Votre second exemple

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

n'a pas de sens car un ne peut pas être inférieur à 40 et supérieur à 50 (ou inférieur à 60 et supérieur à 80) en même temps.

Quelque chose comme

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

ou

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

En supposant que vous souhaitiez l'équivalent de

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

alors, si vous pensez à l'expression originale, elle devrait être

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

La première expression permet à a d’être un nombre compris entre 40 et 50 ou entre 60 et 80. Invalidez-le en anglais et vous voulez un nombre inférieur à 40 ou entre 50 et 60 ou plus de 80.

Les lois de De Morgan peuvent vous donner une réponse précise, mais je préfère un code que vous pouvez lire à haute voix et donner un sens à.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top