求下一天(求下N天)

求下一天:

输入年月日的值(均为整型数),输出该日期的下一天。 其中:年份的合法取值范围为[1820,2020] ,月份合法取值范围为[1,12] ,日期合法取值范围为[1,31] 。 注意:不允许使用Java中和日期相关的类和方法。
要求:Main类中必须含有如下方法,签名如下:
public static void main(String[] args);//主方法
public static boolean isLeapYear(int year) ;//判断year是否为闰年,返回boolean类型
public static boolean checkInputValidity(int year,int month,int day);//判断输入日期是否合法,返回布尔值
public static void nextDate(int year,int month,int day) ; //求输入日期的下一天

输入格式:
在一行内输入年月日的值,均为整型数,可以用一到多个空格或回车分隔。
输出格式:
当输入数据非法及输入日期不存在时,输出“Wrong Format”;
当输入日期合法,输出下一天,格式如下:Next date is:年-月-日
输入样例1:
在这里给出一组输入。例如:
2020 3 10

输出样例1:
在这里给出相应的输出。例如:
Next date is:2020-3-11

输入样例2:
在这里给出一组输入。例如:
2025 2 10

输出样例2:
在这里给出相应的输出。例如:
Wrong Format

import java.util.Scanner;

public class Main {
	
	public static boolean isLeapYear(int year) {//判断是否闰年
		boolean isLeapYear = (year % 4 == 0 && year % 100 !=0 )||year % 400 == 0;
		return isLeapYear;
	}
	
	public static boolean checkInputValidity(int year,int month,int day) {
	        int[] aa=new int[]{0,31,28,31,30,31,30,31,31,30,31,30,31};
	        if(isLeapYear(year))
	        	aa[2] = 29;
	        boolean checkInputValidity = (year>=1820&&year<=2020&&month>0&&month<=12&&day<=aa[month]&&day>0);
	        	return checkInputValidity;
	}
	
	public static void nextDate(int year,int month,int day) {
	//求下一天注意夸年月以及特殊月份以及闰年和平年的二月不同天数
		int[] aa=new int[]{0,31,28,31,30,31,30,31,31,30,31,30,31};
        if(isLeapYear(year))
        	aa[2] = 29;
    	int a = 0,b = 0,c = 0;
        if(checkInputValidity(year,month,day)) {
        	if(month==12) {
    			if(day==aa[month]) {
    			a = year+1;
    			b = 1;
    			c = 1;}
    		if(day>0&&day<aa[month]) 
    				{a = year;
    				b = month;
    				c =day +1;
    				}
    		}
    		if(month<12) {
    			if(day==aa[month]) {
    				a = year;
    				b = month + 1;
    				c = 1;}
    			if(day>0&&day<aa[month]) 
    					{a = year;
    					b = month;
    					c = day+1;
    					}
    		}
			System.out.println("Next date is:"+a+"-"+b+"-"+c);
			}
		else System.out.println("Wrong Format");
	}

	public static void main(String[] args) {
		Scanner LJY = new Scanner(System.in);
		Main ljy = new Main();
		int year = LJY.nextInt();
		int month = LJY.nextInt();
		int day = LJY.nextInt();
		ljy.nextDate(year,month,day);

	}

}

求下N天就考虑特殊月份以及天数大致原理和求下一天相似

import java.util.Scanner;

public class Main {
	
	public static boolean isLeapYear(int year) {
		boolean isLeapYear = (year % 4 == 0 && year % 100 !=0 )||year % 400 == 0;
		return isLeapYear;
	}
	
	public static boolean checkInputValidity(int year,int month,int day,int n) {
	        int[] aa=new int[]{0,31,28,31,30,31,30,31,31,30,31,30,31};
	        if(isLeapYear(year))
	        	aa[2] = 29;
	        boolean checkInputValidity = (year>=1820&&year<=2020&&month>0&&month<=12&&day<=aa[month]&&day>0&&Math.abs(n)<=10&&Math.abs(n)>=0);
	        	return checkInputValidity;
	}
	
	public static void nextDate(int year,int month,int day,int n) {
		int[] aa=new int[]{0,31,28,31,30,31,30,31,31,30,31,30,31};
        if(isLeapYear(year))
        	aa[2] = 29;
    	int a = 0,b = 0,c = 0;
        if(checkInputValidity(year,month,day,n)) {
            if (n==0) {
        		a = year;
        		b = month;
        		c = day;
        	}
        	if(month==12&&n>0) {
    			if(day-n<=aa[month]&&day-n>0) {
    			a = year;
    			b = month;
    			c = day-n;}
    			if(day-n<=aa[month]&&day-n<0) {
    				a = year;
        			b = month-1;
        			c = aa[b]-n+day;
    			}
    			if(day-n<=aa[month]&&day-n==0) {
    				a = year;
        			b = month-1;
        			c = aa[b]-n+day;
    			}
        	}
    		if(month==12&&n<0) {
    			if(day-n>aa[month]) {
    				a = year +1;
    				b = 1;
    				c =day - n -aa[month];
    			}
    			if(day-n<=aa[month]) {
    				a = year;
    				b = month;
    				c =day - n;
    			}
    		}
    		if(month>1&&month<12&&n>0) {
    			if(day-n<=aa[month]&&day-n>0) {
    			a = year;
    			b = month;
    			c = day-n;}
    			if(day-n<=aa[month]&&day-n<0) {
    				a = year;
        			b = month-1;
        			c = aa[b]-n+day;
    			}
    			if(day-n<=aa[month]&&day-n==0) {
    				a = year;
        			b = month-1;
        			c = aa[b]-n+day;
    			}
        	}
    		if(month<12&&month>1&&n<0) {
    			if(day-n>aa[month]) {
    				a = year;
    				b = month+1;
    				c =day - n -aa[month];
    			}
    			if(day-n<=aa[month]) {
    				a = year;
    				b = month;
    				c =day - n;
    			}
    		}
    		if(month == 1&&n>0) {
    			if(day-n<=aa[month]&&day-n>0) {
    				a = year;
        			b = month;
        			c = day-n;
    			}
    			if(day-n<=aa[month]&&day-n<0) {
    				a = year-1;
        			b = 12;
        			c = aa[b]-n+day;
    			}
    			if(day-n<=aa[month]&&day-n==0) {
    				a = year-1;
        			b = 12;
        			c = aa[b]-n+day;
    			}
    		}
    		if(month==1&&n<0) {
    			if(day-n>aa[month]) {
    				a = year;
    				b = month+1;
    				c =day - n -aa[month];
    			}
    			if(day-n<=aa[month]) {
    				a = year;
    				b = month;
    				c =day - n;
    			}
    		}
			System.out.println(n+" days ago is:"+a+"-"+b+"-"+c);
			}
		else System.out.println("Wrong Format");
	}

	public static void main(String[] args) {
		Scanner LJY = new Scanner(System.in);
		Main ljy = new Main();
		int year = LJY.nextInt();
		int month = LJY.nextInt();
		int day = LJY.nextInt();
        int n = LJY.nextInt();
		ljy.nextDate(year,month,day,n);

	}

}
  • 6
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值