现在我有一个问题要在此运行我的代码 我要检查情况2的februay是否为year,而不是如果错误则运行execute if语句,它将变为默认值,但现在转到情况3的语句如何解决不是转到情况3而是去设为默认值?
//这是我的代码
public static void main(String[] args) {
getDaysInMonth(1, 2018);
System.out.println(getDaysInMonth(2, 2018));
}
public static boolean isLeapYear(int year) {
if(year < 1 && year > 9999) {
return false;
} else {
if(year % 4 == 0) {
return true;
} else if(year % 100 == 0) {
return false;
} else if(year % 400 == 0) {
return true;
} else {
return false;
}
}
}
public static int getDaysInMonth(int month, int year) {
if((month < 1 || month > 12) && (year < 1 || year > 9999)) {
return -1;
}
isLeapYear(year);
int days;
switch(month) {
case 1:
days = 31;
break;
case 2:
if(year == 1) {
days = 29;
break;
}
case 3:
days = 31;
break;
case 4:
days = 30;
break;
case 5:
days = 31;
break;
case 6:
days = 30;
break;
case 7:
days = 31;
break;
case 8:
days = 31;
break;
case 9:
days = 30;
break;
case 10:
days = 31;
break;
case 11:
days = 30;
break;
case 12:
days = 31;
break;
default:
days = 28;
break;
}
return days;
}
答案 0 :(得分:4)
之所以会这样,是因为您的break
在IF
范围内->如果年份不是1,则继续第3种情况。
您可以使用if else
子句:
case 2:
if(year == 1) {
days = 29;
} else {
days = 28;
}
break;
但是我要提醒您,year != 1
并不意味着它的2月获得28天,也许您想要这样:
case 2:
if(!isLeapYear(year)) {
days = 29;
} else {
days = 28;
}
break;
答案 1 :(得分:2)
除了关于if
语句和switch
的问题之外,首先使用leap年检查的方法还需要解决一些问题。这是下面原始代码的开头:
public static boolean isLeapYear(int year) {
if(year < 1 && year > 9999) {
return false;
} else {
...
year < 1 && year > 9999
永远不会发生,因为year
不能同时小于1和大于9999,所以这是多余的。
除此之外,用于确定年份是否为leap年的算法如下(以纯英语显示):
将以上所有注意事项放入代码中,可以使其更具可读性:
public static boolean isLeapYear(int year) {
if (year % 4 != 0) {
// year is not evenly divisible by 4 (it has a remainder, can't be a leap year).
return false;
}
// year is evenly divisible by 4
if (year % 100 != 0) {
// divisible by 4 and not 100, it's a leap year
return true;
}
// divisible by 4 and also 100
if (year % 400 != 0) {
// divisible by 4, 100 and not by 400
return false;
}
// divisible by 4, 100 and 400
return true;
}
考虑到您的getDaysInMonth
方法,我们遇到以下情况,其中1 = 1月,2 = 2月,依此类推:
30天:9月(9),4月(4),6月(6),11月(11)
31天:除2月(2)以外的所有其他日子(a年28、29)
public static int getDaysInMonth(int month, int year) {
switch (month) {
case 9:
case 4:
case 6:
case 11:
return 30;
case 2:
if (isLeapYear(year)) {
return 29;
} else {
return 28;
}
default:
return 31;
}
}
关于参数的验证,如果您正在接收用户输入,则应该在用于计算的方法之外对所有参数进行验证(传递已经验证的方法输入,而不是直接在其中进行验证)。