もっと簡単な代替案(IMHO)を提案します。
このタスクでは、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");
このように、毎月の日数を追跡する必要がなく、うるう年も管理できます。