【问题标题】:Test two integers to determine if it is day or night测试两个整数以确定是白天还是黑夜
【发布时间】: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...

我的结论是我在代码中犯了错误,而不是我的逻辑。有什么想法吗?

【问题讨论】:

  • sunriseDifferencesunsetDifference 都为零或正数或两者均为负数时,您会处理夜晚。您仅将其视为一天为负数,而一天为零或正数。因此,请检查您对这两个值的计算,看看为什么两者总是正数或总是负数。
  • 只是在检查,但您是否确定您有具有不同符号的sunriseDifference 和sunsetDifference 的数据?
  • 对不起,我不明白日落和日出的区别代表什么?
  • 那么它到底对哪些数据不起作用?打印这两个变量的值会有所帮助
  • 代码和这些值似乎没有问题,所以它一定是别的东西......你是否尝试在第一个断点处检查那里的值,并且你能检查一下它需要哪个分支吗?

标签: ios objective-c cocoa-touch


【解决方案1】:

同意 cmets 的说法,如果没有气象服务的语义,这个问题很难理解。但如果我在设计一个气象服务,这两个参数总是会有不同的标志:

sunriseDifference > 0 && sunsetDifference < 0  means it's day
sunriseDifference < 0 && sunsetDifference > 0  means it's night

如果我对数据的含义是正确的,那么代码可以更正并简化为:

self.isNight = sunriseDifference < 0 && sunsetDifference >= 0;

【讨论】:

  • 但是如果标志总是不同,他的代码总是将 night 设置为 NO,这似乎不是这样
  • @FabioRitrovato - 是的,你是对的。有点破坏我的理论,不是吗。
  • 刚刚在上面的 cmets 中添加了额外的信息。
  • @danh 我接受了你的回答。真正的罪魁祸首是方法实现中的一条孤立代码行,它将 self.isNight 设置为 YES,而不管我们上面讨论的逻辑如何。您上面的简化行也很有帮助,我已将其合并。
  • @ChrisHolloway 很高兴听到它有帮助。感谢您的跟进。
猜你喜欢
  • 1970-01-01
  • 2013-02-09
  • 1970-01-01
  • 2019-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多