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
相关产品推荐
相关产品推荐

