Java 未在非闰年将日期注册为无效日期

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 ==

我正在做一个程序,它接受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 == 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;
           }