180720_一种有效的日期计数方法
程序员文章站
2022-12-25 11:53:21
最近在学习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);
可见,代码整整少了一半。
反思:
思考之下,我的代码完全是属于未经雕琢,直来直去的代码,仅实现了功能,却未能思考代码中哪些部分是必定执行,哪些部分不需过多检查,总之属于未理清思路。
这是一个大的教训。
写代码还是要勤勤恳恳,多写多记多重构。
要问同学何许人?
河北辛集年轻妈妈是也。