2010-10-28 4 views
0

J'ai un ensemble de contrôles pour effectuer certaines tâches.Les opérateurs de comparaison ne fonctionnent pas comme prévu

// tempDouble is a (double), hour is an int 

if (tempDouble > 60.0 && (hour >= 6 || hour <= 17)) { //CLEAR 
    NSLog(@"CLEAR"); 
} 

else if (tempDouble > 60.0 && (hour < 6 || hour > 17)) { //NIGHT_CLEAR 
    NSLog(@"NIGHT_CLEAR"); 
} 

else if (tempDouble <= 60.0 && (hour >= 6 || hour <= 17)) { //CLOUDY 
    NSLog(@"CLOUDY"); 
} 

else if (tempDouble > 60.0 && (hour < 6 || hour > 17)) { //NIGHT_CLOUDY 
    NSLog(@"NIGHT_CLOUDY"); 
} 

Quand j'ai une température de 76,3 et une heure de 2, par exemple, je vous attendez à passer à NIGHT_CLEAR, mais il va en fait CLEAR. Ai-je mis en place mes comparaisons à tort?

Merci d'avance pour cette question simple!

Répondre

6
(hour >= 6 || hour <= 17) 

est toujours vrai. Tous les nombres réels sont supérieurs ou égaux à 6 ou inférieurs ou égaux à 17 (certains sont les deux). Je pense que vous voulez:

(hour >= 6 && hour <= 17) 

La même chose s'applique à CLOUDY.

+0

Exactement, ne peut pas croire que je ne l'ai pas vu ça avant! –

+0

Merci beaucoup! –

1

Certains de vos || pourraient être mieux d'être &&.

Peut-être ce que vous voulez est ...

if (tempDouble > 60.0 && (hour >= 6 && hour <= 17)) { //CLEAR 
    NSLog(@"CLEAR"); 
} 

else if (tempDouble > 60.0 && (hour < 6 && hour > 17)) { //NIGHT_CLEAR 
    NSLog(@"NIGHT_CLEAR"); 
} 

else if (tempDouble <= 60.0 && (hour >= 6 || hour <= 17)) { //CLOUDY 
    NSLog(@"CLOUDY"); 
} 

else if (tempDouble > 60.0 && (hour < 6 || hour > 17)) { //NIGHT_CLOUDY 
    NSLog(@"NIGHT_CLOUDY"); 
} 
+2

Attention à laquelle vous passez de '||' '&&'. '(heure < 6 && hour > 17)' est toujours faux. – eldarerathis

+0

En plus de ce qu'Eldarerathis a dit, changer la première comparaison à && a résolu le problème. –

Questions connexes