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

Java计算偏移后月份最后一天的代码逻辑错误如何修复?

代码问题排查与修复

原代码核心错误点

  • 时间计数逻辑错误:Java Calendar 类的MONTH字段从0开始计数(1月对应0,12月对应11),原代码反复额外加1的逻辑完全混乱,导致目标月份计算错误。
  • 需求匹配错误:需求要求返回目标月份的总天数,原代码中判断当前月的分支返回的是当月剩余天数,不符合要求。
  • 重复累加月份:原代码先调用set(Calendar.MONTH, mesecorr +1 +mese),之后又多余调用add(Calendar.MONTH, mese),相当于对月份累加了两次mese,完全偏离预期。
  • 语法与逻辑分支缺失:if判断分支没有写return语句,且用到的giornoFineMese变量未声明,存在编译错误。
  • 年份判断逻辑完全错误:用(mesecorr +1 +mese) %13判断是否跨年的逻辑无依据,反而会打乱Calendar本身自带的自动跨年进位能力。

修复后可运行代码

public int getmax(int mese){
    // 参数合法性校验
    if(mese <0 || mese>5){
        throw new IllegalArgumentException("mese参数取值范围为0~5");
    }
    Calendar c = Calendar.getInstance();
    // 直接在当前月份基础上加mese,Calendar会自动处理跨年
    c.add(Calendar.MONTH, mese);
    // 获取目标月份的最大天数
    int maxDay = c.getActualMaximum(Calendar.DAY_OF_MONTH);
    // 打印日志按需保留
    System.out.printf("目标月份为%d月,总天数:%d%n", c.get(Calendar.MONTH)+1, maxDay);
    return maxDay;
}

验证示例

比如当前是8月(对应Calendar.MONTH值为7),传入mese=3,加3个月后得到11月,返回30,完全符合示例要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 23:09:04