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)
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 à.