【发布时间】:2015-01-01 22:27:28
【问题描述】:
我正在开展一个项目,该项目使用来自国家气象局的数据。一个应用程序正在确定是白天还是晚上(根据数据,而不是根据用户的位置)
我的问题是:我不明白为什么我写的代码总是返回是晚上!
我有一个财产:
BOOL isNight;
还有一些变量:
int sunriseDifference
int sunsetDifference
表示气象站观测时间与该气象站当地日落或日出时间之间的差异。
我的逻辑是这样的:
sunriseDifference > 0 ANDsunsetDifference > 0 则为夜晚(PM 夜晚)
或
sunriseDifference
否则就是白天。
代码如下:
if ((sunriseDifference >= 0) && (sunsetDifference >= 0)) {
self.isNight = YES;
} else if ((sunriseDifference <= 0) && (sunsetDifference <= 0)) {
self.isNight = YES;
} else self.isNight = NO;
这总是产生
self.isNight = YES
任何想法我的错误在哪里?
编辑
为了清楚起见,sunriseDifference 和sunsetDifference 是int,表示自日落或日出以来的分钟数。
所以在 1500 时,在加利福尼亚的一个气象站(白天),变量的值是:
sunriseDifference = 482
sunsetDifference = -118
所以,根据我的逻辑,以上两个条件都不满足,因此 self.isNight 应该是 NO。我的代码返回 self.isNight 为 YES...
我的结论是我在代码中犯了错误,而不是我的逻辑。有什么想法吗?
【问题讨论】:
-
当
sunriseDifference和sunsetDifference都为零或正数或两者均为负数时,您会处理夜晚。您仅将其视为一天为负数,而一天为零或正数。因此,请检查您对这两个值的计算,看看为什么两者总是正数或总是负数。 -
只是在检查,但您是否确定您有具有不同符号的sunriseDifference 和sunsetDifference 的数据?
-
对不起,我不明白日落和日出的区别代表什么?
-
那么它到底对哪些数据不起作用?打印这两个变量的值会有所帮助
-
代码和这些值似乎没有问题,所以它一定是别的东西......你是否尝试在第一个断点处检查那里的值,并且你能检查一下它需要哪个分支吗?
标签: ios objective-c cocoa-touch