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