Algs4-1.2.11根据Date的API实现一个SmartDate类型

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());
    }
}
posted @ 2018-10-25 11:42  修电脑的龙生  阅读(342)  评论(0编辑  收藏  举报