要求是這樣,提示要求輸入一串整數字符的字串(YYYYMM)作為一個檢視的年份和月份,判斷一下這個月有多少個自然日,也即多少天。
如果數字的字串超出限制或不合法,則輸出錯誤提示,並提示重新輸入,直到正確並計算結果。
工具/原料
一臺再正常不過的已經配置了java環境的電腦
一款適合自己的開發整合環境,筆者自己用的是eclipse Kepler
活躍的大腦,勤勞的雙手
YYYYMM這個月有多少天?
第一個要考慮的問題,如何判斷月份。
我們會用一個switch語句區分大小月:
一三五七八十臘,三十一天永不差。
剩下的除了二月份需要判斷平閏年之外都是三十天。
如圖:
第二要考慮的問題,就是怎麼判斷平閏年。
一個年份數可以被100整除的話,如果同時也可以被4整除才是閏年,否則的話ta是平年。
一個年份數不能被100整除的話,如果ta此時可以被4整除也是閏年,否則的話ta是平年。
如圖:
接下來,如果獲得一個年份和月份的數字呢?
這是我們今天的重頭戲。
我們需要做許多判斷,這裡,我們分很多步驟來詳述。
獲取輸入引數,這裡用Scanner類的非靜態nextInt()方法。
Scanner sc = new Scanner(System.in);
int number = sc.nextInt();
但是,如果輸入的是字母,或者位數不足,不符合YYYYMM格式,那不就麻煩了?所以,我們還需要加以判斷。
這裡就不能直接從scanner裡面獲取數字了,我們要獲取的是字串,
Scanner sc = new Scanner(System.in);
String str = sc.nextLine();
然後用正則表示式判斷一下。
if (!str.matches("^[1-9]{1}[0-9]{5}$")) {
System.out.println("Not an integer number! Input again:");
}
上一步驟中的正則我們偷了一點兒小懶,是為了讓大家更容易理解。
所以,這裡我們還缺少對月份的判斷。很簡單,如圖:
最後,我們寫一個main方法測試一下,看看是否是咱預期的效果。
String number = scannerNumber();
int year = Integer.parseInt(number.substring(0, 4));
int month = Integer.parseInt(number.substring(4));
System.out.println("this is month has " + daysOfThisMonth(year, month));
注意事項
注意總結,溫故知新嘛!不要玩一玩就過去了。也別變成和筆者一樣的呆子哦~~
耐心,認真,仔細,嚴謹。