180720_一種有效的日期計數方法
最近在學習C#,昨天老師佈置了一個作業,輸入年月日,返回這一天是一年中的第幾天。
大致分析了一下,想出了一種方法,大致思路如下:
使用 switch 檢測月份得出該月長度;
根據年份決定二月長度;
最後再加上日期。
以下列出程式碼:
1 Console.WriteLine ("請輸入年份:"); 2 int year = int.Parse (Console.ReadLine ()); 3 Console.WriteLine ("請輸入月份:"); 4 int month = int.Parse (Console.ReadLine ()); 5 Console.WriteLine ("請輸入日期:"); 6 int day = int.Parse (Console.ReadLine ()); 7 int days = 0; 8 for (int i = 1; i < month; i++) { 9switch (month) { 10case 2: 11days += (year % 400 == 0 || year % 4 == 0 && year % 100 != 0) ? 29 : 28; 12break; 13case 1: 14case 3: 15case 5: 16case 7: 17case 8: 18case 10: 19case 12: 20days += 31; 21break; 22case 4: 23case 6: 24case 9: 25case 11: 26days += 30; 27break; 28default: 29break; 30} 31 } 32 Console.WriteLine ("該日期是這一年的第{0}天",days+day);
然而,看了一個同學的程式碼,簡直是醍醐灌頂。大致思路如下
使用一個長度為12的陣列分別儲存平年12個月的日期長度。
使用迴圈從一月累加到輸入的月份,並存放到總日期數量中,如輸入7月,則累加 [0]~[7] 元素;
總日期數再加上輸入的日期;
若輸入的月份大於2且為閏年,則總日期數再+1;
程式碼如下:
1 Console.WriteLine ("請輸入年份:"); 2 int year = int.Parse (Console.ReadLine ()); 3 Console.WriteLine ("請輸入月份:"); 4 int month = int.Parse (Console.ReadLine ()); 5 Console.WriteLine ("請輸入日期:"); 6 int day = int.Parse (Console.ReadLine ()); 7 int days = 0; 8 int[] months = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; 9 for (int i = 0; i < month - 1; i++) { 10days += months [i]; 11 } 12 days += day; 13 if (month > 2 && (year % 400 == 0 || year % 4 == 0 && year % 100 != 0)) { 14days++; 15 } 16 Console.WriteLine ("該日期是這一年的第{0}天",days+day);
可見,程式碼整整少了一半。
反思:
思考之下,我的程式碼完全是屬於未經雕琢,直來直去的程式碼,僅實現了功能,卻未能思考程式碼中哪些部分是必定執行,哪些部分不需過多檢查,總之屬於未理清思路。
這是一個大的教訓。
寫程式碼還是要勤勤懇懇,多寫多記多重構。
要問同學何許人?
河北辛集年輕媽媽是也。