Я предлагая более простой вариант (ИМХО).
Для этой задачи я бы использовал класс Calendar
, чтобы избежать хранения разных дней и лет в массиве. Високосные годы могут быть проблемой в особых ситуациях.
Прежде всего, утвердите годы. Они являются простейшими из валидаций в этой цепочке и, как и месяцы, не зависят от любого из введенных последовательных параметров. Последняя проверка, сделанная вами, становится первой в этом случае:
if (year < 1880 && year > 2280)
System.out.printf("\n not a valid year");
После проверки года проверяйте месяцы. Они также простое число, но вы должны определить, как вы их управляете. Я возьму диапазон 1 -> 12
:
if(month < 1 || month > 12)
System.out.printf("\n not a valid month");
Наконец, вы строите дату с помощью Calendar
. Таким образом, вы можете получить правильное количество дней, которые соответствуют определенному месяцу. Затем вы подтверждаете правильность.
Calendar cal = Calendar.getInstance();
cal.set(Calendar.YEAR, year);
cal.set(Calendar.MONTH, month - 1); //Calendar manages the months
//from 0 to 11, that's why
//you need to substract 1
int maxDays = cal.getActualMaximum(Calendar.DAY_OF_MONTH);
maxDays
содержит максимальное количество дней для данного месяца и года. Теперь у вас есть только проверить идентификатор входа для дня находится в диапазоне:
if (day < 1 || day > maxDays)
System.out.printf("\n not a valid day");
Таким образом, вам не нужно постоянно отслеживать дни в течение каждого месяца, и вы также управлять високосными ,
'month! = NumMonth []' это даже компиляция? – Abubakkar
'(день! = ДниInMonth [месяц] && день> daysOfMonth [месяц]' !!! –