1. 程式人生 > >180720_一種有效的日期計數方法

180720_一種有效的日期計數方法

2個 class 元素 年月日 ++ 多重 月份 存儲 lin

最近在學習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);

可見,代碼整整少了一半。

反思:

思考之下,我的代碼完全是屬於未經雕琢,直來直去的代碼,僅實現了功能,卻未能思考代碼中哪些部分是必定執行,哪些部分不需過多檢查,總之屬於未理清思路。

這是一個大的教訓。

寫代碼還是要勤勤懇懇,多寫多記多重構。

要問同學何許人?

河北辛集年輕媽媽是也。

180720_一種有效的日期計數方法