问题描述:定义一个GetNextDay函数,GetNextDay函数为了获得当前输入日期的后一个日期, 执行如下操作:
如果输入日期Date中的年year变量是闰年,且月Month变量是二月,天Day变量值小于29,则把天Day变量的值加1;
如果输入日期Date中的年year变量不是闰年,且月Month变量是二月,天Day变量值小于28,则把天Day变量的值加1;
如果输入日期Date中月Month变量是四月、六月、九月、十一月其中之一,天Day变量值小于30,则把天Day变量的值加1;
如果输入日期Date中月Month变量是一月、三月、五月、七月、八月、十月、十二月其中之一,天Day变量值小于31,则把天Day变量的值加1;
如果输入日期Date中的Day变量是1~11月份中某月的最后一天,则把Day变量的值置为下一个月的第一天,月Month变量的值加1;
如果输入日期Date中的Day变量是12月的最后一天,则Day变量的值置为1,month变量的值置为1,year变量的值加1。
关于最后一天的判断,对输入合法性进行检测:
如果是有31天的月份(1,3,5,7,8,10,12),day变量值应该为31;
如果是有30天的月份(4,6,9,11),day变量值应该为30;
如果是有29天的月份(闰年的2月),day变量值应该为29(闰年判断);
如果是有28天的月份(非闰年的2月),day变量值应该为28(闰年判断)。
解决的代码:
package rjcs;
import java.util.Arrays;
import java.util.Scanner;
public class T1 {
public static boolean IsRun(int Y){
if( (Y%4==0 && Y%100!=0) || Y%400==0)return true;
return false;
}
public static void GetNextDate(int Year,int Month,int Day) {
Integer[] arr={1,3,5,7,8,10,12};
boolean i=true;
if(Day>31 || Month>12) return;
if(Month==2){
if(IsRun(Year)==true){
if(Day<29){Day++;}
else if(Day==29){
Month++;Day=1;
}
else i=false;
}
else{
if(Day<28){Day++;}
else if (Day==28){
Month++;Day=1;
}
else i=false;
}
}
else if(Arrays.asList(arr).contains(Month)){
if(Day<31){Day++;}
else{
Month++;
Day=1;
if(Month<=12);
else{
Month=1;
Year++;
}
}
}
else{
if(Day<30){Day++;}
else if(Day==30){
Month++;Day=1;
}else i=false;
}
if(i)System.out.println("下一天是:"+Year+"-"+Month+"-"+Day);
else System.out.println("错误Date");
}
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.println("(日期格式要求为xxxx-xx-xx,严格按照 年-月-日 的顺序输入。)");
String[] Date=in.nextLine().split("-");
int y=Integer.valueOf(Date[0]);
int m=Integer.valueOf(Date[1]);
int d=Integer.valueOf(Date[2]);
in.close();
GetNextDate(y,m,d);
}
}