Java 未在非闰年将日期注册为无效日期
我正在做一个程序,它接受3个整数表示月、日和年,并输出日期。我在白天和闰年的事情上遇到了麻烦。这是我的密码:Java 未在非闰年将日期注册为无效日期,java,Java,我正在做一个程序,它接受3个整数表示月、日和年,并输出日期。我在白天和闰年的事情上遇到了麻烦。这是我的密码: public void setDay(int d) { int m = getMonth(); int y = getYear(); while (m > 0 && m <= 12) { if ((m == 1 || m == 3 || m == 5 || m == 7 || m == 8 || m == 10 || m ==
public void setDay(int d) {
int m = getMonth();
int y = getYear();
while (m > 0 && m <= 12) {
if ((m == 1 || m == 3 || m == 5 || m == 7 ||
m == 8 || m == 10 || m == 12) && (d > 0 && d <= 31)) {
day = d;
break;
}
else if ((m == 4 || m == 6 || m == 9 || m == 11) && (d > 0 && d <= 30)) {
day = d;
break;
}
else if (m == 2) {
if ((y % 400 == 0) || ((y % 4 == 0) && (y % 100 != 0))) {
if (d <= 29) {
day = d;
}
else {
throw new IllegalArgumentException("Invalid day");
}
}
else {
if (day <= 28) {
day = d;
}
else {
throw new IllegalArgumentException("Invalid day");
}
}
break;
}
else {
throw new IllegalArgumentException("Invalid day");
}
}
public void setDay(int d){
int m=getMonth();
int y=getYear();
当(m>0&&m 0&&d 0&&d时,您在这里遇到了问题:
if (day <= 28) {
day = d;
}
if(day)java.util.Calendar
有什么问题吗?你可能可以使用调试器来解决代码中的问题,你不这样认为吗?当你到达时,d
、m
和y
的实际值是多少,而你也错过了2月份d<1
的边缘情况。这就是sor您应该在顶部声明该条件一次,并抛出一个IllegalArgumentException
(带有更清晰的消息,例如“月日(%d)不能小于1”)不要到处重复检查。@RC.这些值是通过其他方法预先确定的,在这种情况下,输入是:2001年第2个月第29天,我已经解决了这个问题,但我的问题仍然存在更改:int m=getMonth();int y=getYear();to:int m=2;int y=2001;如果它工作正常,那么getMonth()就有问题了,getYear()(可能getMonth()给1月0,给2月1?)
if (d <= 28) {
day = d;
}