2010-10-28 55 views
0

我有一组检查来执行某些任务。比较运算符没有按预期运行

// 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"); 
} 

当我有76.3的临时和2小时,例如,我希望它跳转到NIGHT_CLEAR,但它实际上去CLEAR。我是否错误地设置了比较结果?

在此先感谢这个简单的问题!

回答

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

总是如此。所有实数都大于或等于6或小于或等于17(有些都是)。我想你想要:

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

这同样适用于CLOUDY。

+0

没错,不能相信我没有看到之前! – 2010-10-28 01:11:45

+0

非常感谢! – 2010-10-28 01:13:35

1

您的||的一些可能是&&的更好。

也许你想要的是......

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

小心你从'||'切换到'&&'。 '(小时< 6 && hour > 17)'总是错误的。 – eldarerathis 2010-10-28 01:08:11

+0

除了eldarerathis所说的,将第一个比较改为&&解决了这个问题。 – 2010-10-28 01:12:40