Я работаю над программой, которая занимает 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");
}
}
}
Все работает отлично, за исключением того, когда я дата, 2, 29, 2001, например, его должен бросить исключение, но это не так просто печатает это из нормально
Что случилось с 'java.util.Calendar'? Вероятно, вы можете использовать отладчик и выяснить проблему в своем коде, не так ли? Каковы фактические значения 'd',' m' и 'y', когда вы достигаете' while' –
. Вам также не хватает края, где 'd <1' в феврале. Это то, о чем вы должны указать, что условие на самом верху и бросать «IllegalArgumentException» (с более ясным сообщением, например «день месяца (% d) не может быть меньше 1») вместо повторения проверки повсюду , – chrylis
@RC. эти значения предопределены с помощью других методов, в этом случае вход: месяц - 2, день - 29, год 2001 – Zero