我將建議一個更簡單的替代方案(恕我直言)。
對於這個任務,我會直接使用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 2013-03-07 17:07:29
'(day!= daysInMonth [month] && day] daysOfMonth [month]'!!! – 2013-03-07 17:08:00