**
**
3.NextDate 函数包含三个变量:month 、 day 和 year ,函数的输出为输入日期后一天的日期。 例如,输入为 2018年1月 1日,则函数的输出为 2018年1月2日 。要求输入变量 month 、 day 和 year 均为整数值,并且满足下列条件: 1999≤year≤2050。
一、利用java代码实现:
需要考虑的情况:问题主要是对于输入一个年月日,输出它的后一天,这里考虑的情况分别如下所示:
1、该年是否为闰年:为闰年则对于二月这个特殊月,闰年为29天,平年为28天
2、输入的月份月大还是月小,若是月大则除去二月以外,月大有31天,月小有30天,例如输入2018年5月31号则后一天month=month+1,day=1,
2018年4月30号则后一天month=month+1,day=1;
3、输入的月是否为二月,若是二月例如2012年2月29日(闰年)后一天month=month+1;平年类似
4、输入的月份是否是12月,例如2018年12月31号则后一天为2019年1月1号
及year=year+1,month=1,day=1;
二、此题在主函数输入数据时要对年月日是否合法进行检测,月大不超过31天,月小不超过30天,对于闰年二月天数不超过29天,对于平年二月天数不超过28天。再就是对于年份的限制是在1999≤year≤2050。
在NextDate函数中对于传入的三个参数(year,month,day)要进行判断是否是闰年或平年,传入的月份月大还是月小,是否为二月,是否为12月份,以及天数进行判断(为什么要进行判断,因为在这函数中要输出你输入年月日的后一天,所以多种情况要考虑好)若对于不少出现在边界处的年月日例如:2018年2月2号输出后一天只需要day=day+1;(不是处于边界情况下)**
本人java实现的代码如下:
package practical;
import java.util.Scanner;
public class LaterDay {
public static void NextDate(int year,int month,int day) {
if(year%40&&year%100!=0&&month2&&day29){//当为润年的时候,二月有29天
month=month+1;
day=1;
System.out.printf("%d",year);
System.out.printf(“年”);
System.out.printf("%d",month);
System.out.printf(“月”);
System.out.printf("%d",day);
System.out.printf(“日”);
}
else if(month2&&day==28){//当该年为平年的时候,二月为28天,输出日期后一天,月份加1,将具体几号置为1
month=month+1;
day=1;
System.out.printf("%d",year);
System.out.printf(“年”);
System.out.printf("%d",month);
System.out.printf(“月”);
System.out.printf("%d",day);
System.out.printf(“日”);
} else if(month==12&&day==31) {//当输入月份为12月31日此情况下要输出后一天则要将其年份加1,月份和日期号置为1 year=year+1; month=1; day=1; System.out.printf("%d",year); System.out.printf("年"); System.out.printf("%d",month); System.out.printf("月"); System.out.printf("%d",day); System.out.printf("日"); } //当输入月大,日子为最大31号,则执行月份+1,日期号置为1 else if(month==1&&day==31||month==3&&day==31||month==5&&day==31||month==7&&day==31||month==8&&day==31||month==10&&day==31 ){ month=month+1; day=1; System.out.printf("为什么输出"); System.out.printf("%d",year); System.out.printf("年"); System.out.printf("%d",month); System.out.printf("月"); System.out.printf("%d",day); System.out.printf("日"); } else if(month==4&&day==30||month==6&&day==30||month==9&&day==30||month==11&&day==30){ month=month+1; day=1; System.out.printf("%d",year); System.out.printf("年"); System.out.printf("%d",month); System.out.printf("月"); System.out.printf("%d",day); System.out.printf("日"); } else { day=day+1; System.out.printf("%d",year); System.out.printf("年"); System.out.printf("%d",month); System.out.printf("月"); System.out.printf("%d",day); System.out.printf("日"); } } public static void ErrorTip(int i) {//当输入年份月份日期号不正确的时候给出的提示 System.out.println("输入的整数不合法"); } public static void main(String[] args) {//主函数 Scanner scan=new Scanner(System.in); System.out.println("请输入年份"); int year=scan.nextInt(); if(year>1998&&year<2051) { System.out.println("请输入月份"); } else { ErrorTip(year); } int month=scan.nextInt(); if(month>0&&month<13) { System.out.println("请输入具体几号"); } else { ErrorTip(month); } int day=scan.nextInt();//输入天数 if(year%4==0&&year%100!=0&&month==2)//当输入的年份该年为润年的情况下 { if(day>0&&day<30) NextDate(year,month,day); else ErrorTip(day); } else if(month==2) {//输入的该年为平年的情况如下 if(day>0&&day<29) NextDate(year,month,day); else ErrorTip(month); } else if(month==1||month==3||month==5||month==7||month==8||month==10||month==12) {//月大则一个月有31天 if(day>0&&day<32) NextDate(year,month,day); else ErrorTip(day) ; } else {//月小则一月有30天二月份除外 if(day>0&&day<31) NextDate(year,month,day); else ErrorTip(day); } scan.close(); }
}
测试用例如下:
日常记录分享,写的不好的地方请多指教。