输入年月日,输出是这年的第几天

先判断年是否为闰年,再根据闰年平年去计算日子,会很繁杂。计算日子的两部分是重复的。

if(闰年){
	calculate days;
} else { //平年
	calculate days;
}

直接从日期开始,可以看到只是把1月和2月两个不会被闰平年影响的特例提取出来了,其他的还是没有区别,还是比较麻烦。

if(month == 1){
	days = day;
} else if(month == 2) {
	days = day +31;
} else {//从3月开始,后面的月份都得知道是否为闰年。
	if(闰年){
		calculate days;
	} else {
		calculate days;
	}
}

而如果我们只考虑平年这一种情况,先不被闰年所干扰的话。这么容易判断出是闰年后直接days++,从而忽略了只有3月份以后平闰才有区别的情况。

if(month == 1){
	days = day;
} else if(month == 2) {
	days = 28 + day;
} else if(month == 3) {
	days = 59 + day;
} else if (month == 4) {
	days = 90 + day;
} else if (month == 5) {
	days = 120 + day;
} else if (month == 6) {
	days = 151 + day;
} else if (month == 7) {
	days = 181 + day;
} else if (month == 8) {
	days = 212 + day;
} else if (month == 9) {
	days = 243 + day;
} else if (month == 10) {
	days = 273 + day;
} else if (month == 11) {
	days = 304 + day;
} else if (month == 12) {
	days = 334 + day;
}
if(((year % 400 == 0) || (year % 4 ==0 && year % 100 != 0)) && month >= 3){
	days++;
}
sout(days);

这种常量直接的判断,我们可以使用switch,执行效率更高,还能简化代码。
一般地,我们会直接写:

switch(month){
	case 1:
		days += day;
		break;
	case 2:
		days = day + 31;
		break;
	...
}

这么写却是忽略了switch语句的特点,switch语句中case可以打乱顺序,break也可以省略。一旦对应上,会一直往下走,直到遇到break或switch结束才会停止。所以我们这样写:

switch(month){
	case 12:
		days += 30;//加11月的天数
	case 11:
		days += 31;
	...
	case 3:
			if((year % 400 == 0) || (year % 4 ==0 && year % 100 != 0)){
			days += 29;
		} else {
			days += 28;
		}
	case 2:
		days += 31;
	case 1:
		days += day;
}
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值