下面显示的代码可以正常工作,但仅适用于一部分,如果输入的月份小于1或大于12且输入的年份小于1的if ... else语句必须返回-1或超过9999
我已经编译了很多次,甚至尝试重新排列条件,例如将less更改为大于,然后再将整个switch语句放入if语句中。似乎没有任何作用
public static int getDaysInMonth(int month, int year) {
int maxDay = 31;
int secMaxDay = 30;
int specialDay = 29;
int minDay = 28;
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:
if (isLeapYear(year)){
return specialDay;
} else {
return minDay;
}
default:
return secMaxDay;
}
}
}
我上面的代码的预期输出是,当月份或年份或两者的值小于1或大于最大值时,它应返回-1。
答案 0 :(得分:3)
如果两个条件都成立,则您仅返回-1 。
所以您必须更改
if ((month < 1 || month > 12) && (year < 1 || year > 9999))
使用
if ((month < 1 || month > 12) || (year < 1 || year > 9999))
您可以像这样美化它:
if (month < 1 || month > 12 || year < 1 || year > 9999)
问题是(例如)如果month < 1 || month > 12
为true但year < 1 || year > 9999
为false,则true && false
返回false。仅当两个条件都成立时,它才会返回true。
答案 1 :(得分:1)
您真的只想在年份和月份都不好的时候返回-1吗?或者,如果是这样的话,一旦错误,则月份和年份之间的&&应该是||。也是