You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Calendar.HOUR_OF_DAY的时段问候语逻辑错误修正求助

修正Java时段问候语的条件判断逻辑

嘿,我来帮你把这段代码的逻辑理顺!你遇到的问题确实是条件判断的顺序错误——第一个条件mTime.get(Calendar.HOUR_OF_DAY) > 4几乎覆盖了一天里的大部分时间(从5点到23点),后面的>12和>19 || <5根本没机会执行,所以永远只会得到早晨的问候语。

解决这个问题的核心是:把范围更窄、更特殊的时段放在条件判断的最前面,这样每个条件只会匹配对应的时间段,不会被前面的宽泛条件提前拦截。

这里是修正后的代码:

public void onTimeTick() {
    mTime.setTimeInMillis(System.currentTimeMillis());
    // 根据时间段匹配对应的问候语资源ID
    int saluteResId = R.string.salute_fallback;
    int hour = mTime.get(Calendar.HOUR_OF_DAY); // 先把小时值存起来,避免重复调用
    
    // 1. 夜间:19点(晚上7点)到次日5点
    if (hour >= 19 || hour < 5) {
        saluteResId = R.string.salute_night;
    } 
    // 2. 下午/傍晚:12点到18点59分(已经排除了19点及之后的情况)
    else if (hour >= 12) {
        saluteResId = R.string.salute_evening;
    } 
    // 3. 早晨:5点到11点59分(已经排除了12点及之后、凌晨5点之前的情况)
    else if (hour >= 5) {
        saluteResId = R.string.salute_morning;
    }
    // 如果以上条件都不匹配,就用fallback(理论上不会走到这里)
}

逻辑说明:

  • 先判断夜间时段:这个时段的范围是跨零点的,必须放在最前面,不然会被后面的>=5或者>=12覆盖
  • 然后判断下午时段:因为已经排除了19点及之后的时间,所以这里实际匹配的是12:00-18:59
  • 最后判断早晨时段:排除了前面两个时段后,这里匹配的是5:00-11:59
  • 把hour值提前存起来,避免多次调用mTime.get(Calendar.HOUR_OF_DAY),让代码更高效

这样修改后,每个时间段都会正确匹配到对应的问候语资源ID啦!

内容的提问来源于stack exchange,提问作者Priyanshu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 15:03:10