Операторы сравнения не работают должным образом - PullRequest
0 голосов
/ 28 октября 2010

У меня есть набор проверок для выполнения определенных задач.

// 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. Я неправильно настроил свои сравнения?

Заранее спасибо за этот простой вопрос!

Ответы [ 2 ]

6 голосов
/ 28 октября 2010
(hour >= 6 || hour <= 17)

всегда верно. Все действительные числа либо больше или равны 6, либо меньше или равны 17 (некоторые оба). Я думаю, что вы хотите:

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

То же самое относится и к облачности.

1 голос
/ 28 октября 2010

Некоторым из ваших || может быть лучше быть &&.

Возможно, что вы хотите ...

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"); 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...