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

getDaysInMonth方法if-else条件失效,非法参数未返回-1求助

问题诊断与修复方案

嘿,我一眼就瞅出问题出在参数校验的逻辑运算符上了!你的需求是只要月份或年份任意一个超出合法范围,就返回-1,但你现在用的是&&(逻辑与),这就导致只有当月份和年份同时非法的时候才会返回-1,完全不符合预期。

问题根源拆解

原代码里的校验条件:

if ((month < 1 || month > 12) && (year < 1 || year > 9999))

这个条件的意思是:(月份不合法)并且(年份不合法),才会触发返回-1。但你需要的是**(月份不合法)或者(年份不合法)**,所以必须把&&换成||(逻辑或)。

修正后的完整代码

public static int getDaysInMonth(int month, int year) {
    int maxDay = 31;
    int secMaxDay = 30;
    int specialDay = 29;
    int minDay = 28;
    
    // 修正后的参数校验逻辑:任意一个参数非法就返回-1
    if ((month < 1 || month > 12) || (year < 1 || year > 9999)) {
        return -1;
    } else {
        switch (month) {
            case 1:
            case 3:
            case 5:
            case 7:
            case 8:
            case 10:
            case 12:
                return maxDay;
            case 2:
                return isLeapYear(year) ? specialDay : minDay; // 简化成三元表达式,代码更紧凑
            default:
                return secMaxDay;
        }
    }
}

额外优化建议

  • 2月的判断可以简化成三元表达式,让代码更紧凑(上面已经帮你调整了)。
  • 如果想要更好的可读性,也可以把参数校验拆成两个独立的判断:
    if (month < 1 || month > 12) {
        return -1;
    }
    if (year < 1 || year > 9999) {
        return -1;
    }
    
    这样逻辑更直观,哪怕是新手也能一眼看懂校验规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 07:17:34