**
7-2 定义日期类 (28 分)
**
定义一个类Date,包含三个私有属性年(year)、月(month)、日(day),均为整型数,其中:年份的合法取值范围为[1900,2000] ,月份合法取值范围为[1,12] ,日期合法取值范围为[1,31] 。 注意:不允许使用Java中和日期相关的类和方法,否则按0分处理。
要求:Date类结构如下图所示:
解题报告
必须实现类的封装性、否则本题不得分。
输入格式:
在一行内输入年月日的值,均为整型数,可以用一到多个空格或回车分隔。
输出格式:
当输入数据非法及输入日期不存在时,输出“Date Format is Wrong”;
当输入日期合法,输出下一天,格式如下:Next day is:年-月-日
输入样例1:
1912 12 25
输出样例1:
Next day is:1912-12-26
输入样例2:
2001 2 30
输出样例2:
Date Format is Wrong
import java.util.Scanner;
//Date类
class Date{
static int year;
static int month;
static int day;
int[] maxnum=new int[]{0,31,29,31,30,31,30,31,31,30,31,30,31};
//创建年月日的构造方法
public Date(int year,int month,int day){
this.year=year;
this.month=month;
this.day=day;
}
public Date() {
int year,month,day;
}
//getter
public int getYear(){
return year;
}
public int getMonth() {
return month;
}
public int getDay() {
return day;
}
//setter
public void setYear(int year) {
this.year = year;
}
public void setMonth(int month) {
this.month = month;
}
public void setDay(int day) {
this.day = day;
}
//判断year是否为闰年
public static boolean isLeapYear(int year) {
boolean isLeapYear;
isLeapYear = ((year % 4 == 0 && year % 100 !=0 )||year % 400 == 0);
return isLeapYear;
}
//判断输入日期是否合法
public static boolean checkInputValidity(int year, int month, int day) {
boolean checkInputValidity;
int[] a=new int[]{0,31,29,31,30,31,30,31,31,30,31,30,31};
if(!isLeapYear(year))
a[2] = 28;
checkInputValidity = (year>=1900&&year<=2000&&month>0&&month<=12&&day<=a[month]&&day>0);
return checkInputValidity;
}
//得到下一天
public static void getnextDate(int year,int month,int day) {
int[] a=new int[]{0,31,29,31,30,31,30,31,31,30,31,30,31};
int d=0,m=0;
if(!isLeapYear(year))//如果不是闰年
a[2] = 28;
if(checkInputValidity(year,month,day)) {//如果输入的数字合法
if(month==12) {//如果是12月
if(day==a[month]) {//如果是12月的最后一天
year = year+1;
m = 1;
d=1;
}
else{//如果不是12月的最后一天
m=month;
d =day +1;
}
}
else {//如果不是12月
if(day==a[month]) {//如果是该月的最后一天
m = month + 1;
d = 1;
}
else{//如果不是该月的最后一天
m=month;
d = day+1;
}
}
System.out.println("Next day is:"+year+"-"+m+"-"+d);
}
else//如果输入的数字非法
System.out.println("Date Format is Wrong");
}
}
//主类
public class Main {
//主函数
public static void main(String[] args) {
Scanner x=new Scanner(System.in);
Date rq=new Date();
rq.setYear(x.nextInt());//得到年份
rq.setMonth(x.nextInt());//得到月份
rq.setDay(x.nextInt());//得到天
rq.getnextDate(rq.getYear(), rq.getMonth(),rq.getDay());
}
}