2009-09-15 6 views
0

Cela fonctionne bienUtilisation des opérateurs booléens

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

Comment puis-je faire l'inverse de celui-ci?

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)

+0

Comment un nombre peut-il être inférieur à 40 ET supérieur à 50 en même temps? – seth

+0

"Le code ne fonctionne pas comme prévu." - À quoi vous attendiez-vous réellement lorsque vous demandez un chiffre inférieur à 40 et supérieur à 50 en même temps? –

+0

peut-être travailler dans un espace modulo: P – Zed

Répondre

11

Vous voudrez peut-être regarder De Morgan's laws.

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) 
+0

+1. Plusieurs exemples qui démontrent tous une solution possible avec une référence sur où obtenir plus d'informations. –

+0

Logiquement correct, mais le résultat est difficile à lire et empêche l'évaluation du court-circuit. –

+0

aussi j'ai réussi à combiner deux étapes en une seule. maintenant c'est corrigé – Zed

1

Alors que je recommande de trouver comment faire fonctionner correctement (en le réécrivant)

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

devrait fonctionner, je crois.

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

aha, quel est ce nom de dudes qui a la loi que vous avez utilisé nommé d'après lui. j'ai essayé de me rappeler – mkoryak

+0

@ mkoryak voir ma réponse;) – Zed

+0

Ceci est l'une des lois de De Morgan: http: //en.wikipedia.org/wiki/De_Morgan% 27s_laws –

0

Vous avez besoin d'un "OU"

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

Ou, un pas

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

Vous deuxième exemple

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

n'a pas de sens que a ne peut pas être à la fois moins de 40 et plus de 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)) 
0

En supposant que vous voulez l'équivalent de

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

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

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

La première expression permet à a d'être un nombre compris entre 40 à 50 ou de 60 à 80. Négation qu'en anglais et que vous voulez un nombre inférieur à 40 ou entre 50 et 60 ou supérieur à 80.

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

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