1、测试帖链接
http://www.cnblogs.com/ELPSY/p/6605831.html
2、提出的建议
该代码基本符合编码规则所需的正确性、稳定性、可读性的要求。
程序出现错误的地方在对于2月份日期的判定上,以“2000 2 30”的输入语句符合年月日的三个输入条件,但是这并不是一个
正确的日期,所以需要在“判断是否是闰年以及二月的最后一天的情况”这一判断模块中添加一个检查日期是否超出范围的判定。
3、修改后的代码
import java.util.Scanner;
public class NextDateTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
int month,year,day;
Scanner scan=new Scanner(System.in);
while(true){
//输入日期
System.out.println("请输入日期:");
System.out.print("Year=");
year=scan.nextInt();
System.out.print("Month=");
month=scan.nextInt();
System.out.print("Day=");
day=scan.nextInt();
if(checkDate(year, month, day)){
//输出下一天的日期
System.out.println(nextDate(year, month, day));
}
}
}
//检查日期是否合法
public static boolean checkDate(int y,int m,int d){
//年份判断
if(y<1915||y>2050){
System.out.println("年份超出范围");
return false;
}
//月份判断
else if(m<1||m>12){
System.out.println("月份超出范围");
return false;
}
//判断日期
//判断闰年和非闰年二月最后一天
else if(((d<1||d>28)&&m==2&&!(y%4==0&&y%100!=0||y%400==0))||((d<1||d>29)&&m==2&&(y%4==0&&y%100!=0||y%400==0))){
System.out.println("日期超出范围");
return false;
}
//判断其他月最后一天
else if(((d<1||d>30)&&(m==4||m==6||m==9||m==11))||((d<1||d>31)&&(m==1||m==3||m==5||m==7||m==8||m==10||m==12))){
System.out.println("日期超出范围");
return false;
}
else {
return true;
}
}
//NextDate函数
public static String nextDate(int y,int m,int d){
//判断是否是闰年以及二月的最后一天的情况
if((d==28&&m==2&&!(y%4==0&&y%100!=0||y%400==0))||(d==29&&m==2&&(y%4==0&&y%100!=0||y%400==0))){
d=1;
m=3;
}
//其他月份最后一天的情况
else if((d==30&&(m==4||m==6||m==9||m==11))||(d==31&&(m==1||m==3||m==5||m==7||m==8||m==10||m==12))){
d=1;
m++;
}
//每个月不是最后一天的情况
else d++;
//一年最后一天的情况
if(m>12){
m=1;
++y;
}
return "NextDate:"+y+"年"+m+"月"+d+"日";
}
}
4、修正后心得体会
根据测试者的建议增加了对二月以及小月天数的判定,改进了程序的功能,能够符合题意,符合实际。