#相关代码
题目:接收命令行参数年、月、日,判断这一天是当年的第几天
注:判断一年是否是闰年的标准:
1)可以被4整除,但不可被100整除
2)可以被400整除
class Work04{
public static void main(String [] args){
int year = Integer.parseInt(args[0]);
int month = Integer.parseInt(args[1]);
int day = Integer.parseInt(args[2]);
int d = 0;
switch (month) {
case 1:
d = 0;
break;
case 2:
d = 31;
break;
case 3:
d = 59;
break;
case 4:
d = 90;
break;
case 5:
d = 120;
break;
case 6:
d = 151;
break;
case 7:
d = 181;
break;
case 8:
d = 212;
break;
case 9:
d = 243;
break;
case 10:
d = 273;
break;
case 11:
d = 304;
break;
case 12:
d = 334;
break;
default:
System.out.println("你中毒了!只有12个月!!");
break;
}
if (year / 4 == 0 && year / 100 != 0 ){
if (month < 2){}
else if (month == 2 && day == 29){d = ++d;}
else {d = ++d;}
}
else if (year / 400 == 0){
if (month < 2){}
else if (month == 2 && day == 29){d = ++d;}
else {d = ++d;}
}
else {
}
if (day >= 1 && day <= 31){
System.out.println(d + day);
}
else {System.out.println("小子,你输错了!");}
}
}
你用除法肯定会出问题,要用取模符号。还有,你的判断逻辑是不是太多了,没必要啊!
if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0 ){
System.out.println(year+"是闰年");
if (month > 2){
++d;
}
} else {
System.out.println(year+"不是闰年");
}
倒过来从12月往回计算天数更合理,不用break,从哪个月符合case,就一直往下累加天数(switch…case的特性,不加break,就一直往下执行下面的case,知道break或者结束switch语句)
d = 0;
boolean isRunNian ;
if((year % 4 == 0 && year % 100 != 0) || year % 400 == 0){
isRunNian = true;//闰年
}else{
isRunNian = false;//平年
}
switch (month) {
case 12:
d += 30;
case 11:
d += 31;
case 10:
d += 30;
case 9:
d += 31;
case 8:
d += 31;
case 7:
d += 30;
case 6:
d += 31;
case 5:
d += 30;
case 4:
d += 31;
case 3:
if (isRunNian){ d += 29}
else { d += 28}
case 2:
d += 31;
break;
default:
System.out.println("你中毒了!只有12个月!!");
break;
}
//最后加上本月天数还要判断当月是否有这一天,比如4月31号
if (day >= 1 ){
if ((month == 1 || month == 3 /* 其他大月*/) && day <=31){
d += day;
}else if ((/*小月*/) && day <=30){
d += day;
}else if (month == 2 && isRunNian && d<= 29){//闰年二月
d += day;
}else if (month == 2 && !isRunNian && d<= 28){//平年2月
d += day;
}else{
System.out.println("小子,你输错了!");
return;
}
System.out.println(d);
}else{
System.out.println("小子,你输错了!");
}
主要是平闰年的 判定,相关代码写上之后,还是不能判定闰年,并且天数+1