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 stubint 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、修正后心得体会
根据测试者的建议增加了对二月以及小月天数的判定,改进了程序的功能,能够符合题意,符合实际。