我将建议一个更简单的替代方案(恕我直言)。
对于这项任务,我将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
包含给定月份和年份的最大天数。现在,您只需检查当天输入的 id 是否在范围内:
if (day < 1 || day > maxDays)
System.out.printf("\n not a valid day");
这样,您无需跟踪每个月的日子,还可以管理闰年。