1. 程式人生 > >Algs4-1.2.11根據Date的API實現一個SmartDate類型

Algs4-1.2.11根據Date的API實現一個SmartDate類型

exc leg 閏年 整數 row -c nth -s lar

1.2.11根據Date的API實現一個SmartDate類型,在日期非法時拋出一個異常。
答:
參考資料:月份中的二月是28天還是29天,需看年份是否為閏年,閏年定義為:年份能被400整除的是閏年,或者年份能被4整除但不能被100整除的是閏年。
Code:
public class SmartDate
{
private final int myYear;
private final int myMonth;
private final int myDay;

public SmartDate(int month,int day,int year)
{
//暫不支持公元前。
if(year<0) throw new IllegalArgumentException("year is error.");
//月份只能是1至12的整數
if(month<1 || month>12) throw new IllegalArgumentException("month is error.");
//日只能是1至31的整數
if(day<1 || day>31) throw new IllegalArgumentException("day is error.");
//偶數月份的日只能是1至30的數
if(month%2==0 && day>30) throw new IllegalArgumentException("day is error.");
//非潤年的2月,日只能是1至28的數
if(year%400!=0 && (!(year%4==0 && year%100!=0)) && month==2 && day>28) throw new IllegalArgumentException("day is error.");
//潤年的2月,日只能是1至29的數
if((year%400==0 || (year%4==0 && year%100!=0)) && month==2 && day>29) throw new IllegalArgumentException("day is error.");
myYear=year;
myMonth=month;
myDay=day;
//
}

public int month()
{
return myMonth;
}

public int day()
{
return myDay;
}

public int year()
{
return myYear;
}

public String toString()
{
return month()+"/"+day()+"/"+year();
}

public static void main(String[] args)
{
SmartDate d=new SmartDate(9,18,2016);
StdOut.printf("Date is:%s",d.toString());
}
}

Algs4-1.2.11根據Date的API實現一個SmartDate類型