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