因为题目要求参数只能使用int,所以这里不讨论Java的日期特性.
思路分析:
首先闰年的年份2月为29天,平年2月为28天,所以要先判断输入的年份是闰年还是平年,判断方式是:如果年份能够被4整除但不能被100整除,或者年份能被400整除,二者满足其一则为闰年,否则为平年,然后算出输入月份-1的总天数加上当前月份的天数,即得到结果。
代码分析:
如果完全使用if判断,判断当前年,在判断当前月计算的话,未免太繁琐,这里我们可以预先把闰年和平年每月的天数保存到数组中,循环遍历,代码就会精简很多。
public int getdate(int year,int month,int day){
int[] leapYear = {31,29,31,30,31,30,31,31,30,31,30,31};
int[] GapYear = {31,28,31,30,31,30,31,31,30,31,30,31};
boolean isLeapYear = false;
int dayNum = day;
if(year<=0||month<=0||month>12||day<=0||day>31){
return 0;
}
if((year%4==0&&year%100!=0)||year%400==0){
isLeapYear = true;
}
for(int i=0;i<month-1;i++){
if(isLeapYear){
dayNum=dayNum+leapYear[i];
}else{
dayNum=dayNum+GapYear[i];
}
}
return dayNum;
}
另外还有一种方式,可以先按平年将前n-1个月份的的总天数算出来,采用switch case来判断当前月份,得到天数,加上当前天数,最后判断月份是否大于2,如果是,在判断是否为闰年,如果为闰年则+1天,否则就只加上当前月的天数。参考代码如下:
public int getdate2(int year,int month,int day){
int sum=0;
boolean isLeapYear = false;
if(year<=0||month<=0||month>12||day<=0||day>31){
return 0;
}
if((year%4==0&&year%100!=0)||year%400==0){
isLeapYear = true;
}
switch (month) {
case 1:
sum=0;
break;
case 2:
sum=31;
break;
case 3:
sum=31+28;
break;
case 4:
sum=31+28+31;
break;
case 5:
sum=31+28+31+30;
break;
case 6:
sum=31+28+31+30+31;
break;
case 7:
sum=31+28+31+30+31+30;
break;
case 8:
sum=31+28+31+30+31+30+31;
break;
case 9:
sum=31+28+31+30+31+30+31+31;
break;
case 10:
sum=31+28+31+30+31+30+31+31+30;
break;
case 11:
sum=31+28+31+30+31+30+31+31+30+31;
break;
case 12:
sum=31+28+31+30+31+30+31+31+30+31+30;
break;
default:
System.out.println("请输入正确的月份.");
}
if(month>2){
if(isLeapYear){
sum=sum+day+1;
}else{
sum=sum+day;
}
}else{
sum=sum+day;
}
return sum;
}
以上为自己学习记录,有问题的地方欢迎大家讨论指正。