第二次作业+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、修正后心得体会

  根据测试者的建议增加了对二月以及小月天数的判定,改进了程序的功能,能够符合题意,符合实际。

posted @ 2017-03-27 22:43  xwhisper  阅读(226)  评论(1编辑  收藏  举报