比较运算符未按预期运行

时间:2010-10-28 01:02:02

标签: iphone objective-c comparison

我有一组检查来执行某些任务。

// 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和1小时时,我希望它跳到NIGHT_CLEAR,但实际上它会转到CLEAR。我是否错误地进行了比较?

提前感谢这个简单的问题!

2 个答案:

答案 0 :(得分:6)

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

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

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

这同样适用于CLOUDY。

答案 1 :(得分: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"); } 更好。

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

{{1}}