1.2.12为SmartDate添加一个方法dayOfTheWeek(),为日期中每周的日返回Monday、Tuesday、Wednesday,Thursday,Friday,Saturday或Sunday中的适当值。你可以假定时间是21世纪。
答:

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.");
        if(month<1 || month>12)    throw new IllegalArgumentException("month is error.");
        if(day<1 || day>31)    throw new IllegalArgumentException("day is error.");
        if(month%2==0 && day>30)  throw new IllegalArgumentException("day is error.");
        if(year%400!=0 && (!(year%4==0 && year%100!=0)) && month==2 && day>28) throw new IllegalArgumentException("day is error.");
        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 dayOfTheWeek()
    {
        int w=(myYear%100+(myYear%100)/4+(myYear-myYear%100)/4-2*(myYear-myYear%100)+26*(myMonth+1)/10+myDay-1)%7;
        if(w<0) w=w+7;
        String weekstr="";
        switch(w)
        {
            case 0: weekstr="Sunday"; break;
            case 1: weekstr="Monday"; break;
            case 2: weekstr="Tuesday"; break;
            case 3: weekstr="Wednesday"; break;
            case 4: weekstr="Thursday"; break;
            case 5: weekstr="Friday"; break;
            case 6: weekstr="Saturday"; break;
        }
      return weekstr;
    }
   
    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,WeekDay is:%s",d.toString(),d.dayOfTheWeek());
    }
}
参考资料:百度百科:蔡勒公式、维基百科英文版:Zeller's congruence、《离散数学及其应用》原书第七版中文版:除法算法。
注意事项:计算机语言中的模运算可以返回负数,而数学定义中的模运算不能返回负数,这里采用数学定义中的模运算。


转载于:https://www.cnblogs.com/longjin2018/p/9848894.html

Algs4-1.2.12为SmartDate添加一个方法dayOfTheWeek()相关推荐

  1. 设计一个类代表二维空间的一个点,设计一个类代表二维空间的一个圆。要求两个成员变量。一个是圆心,一 个是半径,提供计算面积的方法。为上述Cricle类添加一个方法,计算一个点(Point)是否在圆内

    (1) 设计一个类代表二维空间的一个点 (2) 设计一个类代表二维空间的一个圆.要求两个成员变量.一个是圆心,一 个是半径,提供计算面积的方法. (3) 为上述Cricle类添加一个方法,计算一个点( ...

  2. Java基础篇:为Box类添加一个方法

    尽管创建一个仅包含数据的类是相当不错的事情,但这样的情况很少发生.大部分情况是你将使用方法存取由类定义的实例变量. 事实上,方法定义大多数类的接口.这允许类实现函数可以把内部数据结构的特定布局隐蔽到方 ...

  3. RegisterUserFunc为测试对象添加新方法或重写已有方法

    在实际的自动化脚本开发过程中,发现QTP提供的方法不够用,但幸好QTP的扩展性很强,RegisterUserFunc函数: RegisterUserFunc函数既可以用户自定义函数也可以重写已有的方法 ...

  4. 你会如何给全局对象添加toString()方法

    首先,在讨论如何给所有方法window对象添加toString方法的时候,我们先来说说window的对象继承与对象实例,以及构造函数的this指针,还有变量的提升与方法的调用方式,最终一探window ...

  5. CC2540 OSAL 学习其中原理,以及 给任务 添加 一个事件(定时发送串口消息)

    参考学习大神博客: http://blog.csdn.net/feilusia/article/details/51083953 : http://blog.csdn.net/xiaoleiacmer ...

  6. Asp.Net MVC4入门指南(3):添加一个视图

    在本节中,您需要修改HelloWorldController类,从而使用视图模板文件,干净优雅的封装生成返回到客户端浏览器HTML的过程. 您将创建一个视图模板文件,其中使用了ASP.NET MVC ...

  7. Entity Framework 的小实例:在项目中添加一个实体类,并做插入操作

    Entity Framework 的小实例:在项目中添加一个实体类,并做插入操作 Entity Framework 的小实例:在项目中添加一个实体类,并做插入操作 1>. 创建一个控制台程序 2 ...

  8. Pixhawk---通过串口方式添加一个自定义传感器(超声波为例)

    Pixhawk-添加一个自定义传感器-超声波(串口方式) 1 说明   首先超声波模块是通过串口方式发送(Tx)出数据,使用的模块数据发送周期为100ms,数据格式为: R0034 R0122 R01 ...

  9. 012.Adding a New Field --【添加一个新字段】

    索引: 目录索引 Adding a New Field 添加一个新字段 2016-10-14 3 分钟阅读时长 作者 By Rick Anderson In this section you'll u ...

最新文章

  1. Linux cuda cudann的安装
  2. 算法------二叉树的层序遍历
  3. 免费实现服务器登录手机短信通知
  4. Web前端开发笔记——第二章 HTML语言 第十节 画布标签、音视频标签
  5. 产品文档体系结构的思考
  6. quantum theory
  7. 牛客网未通过代码---
  8. e300氛围灯哪里调节_保时捷macan内饰改装升级32色呼吸氛围灯
  9. 兰州大学2016年初试成绩基本要求
  10. python测试系列教程 —— 单元测试unittest
  11. java web ajax异步刷新页面,ajax自动刷新页面有关问题
  12. mpls--通过全局路由表和静态路由的因特网接入
  13. 老男孩python作业_老男孩python学习之作业一购物小程序
  14. AutoHotKey完成ass字幕文件字幕偏移时间修改
  15. MyEclipse配置jdk
  16. linux u盘格式化失败怎么办,u盘无法完成格式化怎么办
  17. python爬取周杰伦歌词_Python 爬取周杰伦 instagram
  18. 2020最新各大厂面试遇到的100道软件测试面试题+答案纯干货!! 金九银十到了 快点看!!!
  19. 辞旧迎新,继往开来:2021→2022
  20. border属性之border-radius

热门文章

  1. web请求判断客户端类型
  2. 微软关于XP退役的进一步说明。
  3. mysql导出数据库数据及表结构
  4. 研华物联网论坛和ARM技术研讨会随笔
  5. C++ link2005 error 错误 解决方法汇总(一般重复定义,如果都是不就是 函数定义和实现没有分离)...
  6. ADO数据库编程详解(C++)----初级入门篇
  7. pgpool-II的性能缺陷(二)
  8. vue2.0transition过渡的使用介绍
  9. [Django学习]第三章 视图和url配置
  10. GoDaddy万用https ssl证书如何通过DNS审核