Algs4-1.2.12为SmartDate添加一个方法dayOfTheWeek()
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()相关推荐
- 设计一个类代表二维空间的一个点,设计一个类代表二维空间的一个圆。要求两个成员变量。一个是圆心,一 个是半径,提供计算面积的方法。为上述Cricle类添加一个方法,计算一个点(Point)是否在圆内
(1) 设计一个类代表二维空间的一个点 (2) 设计一个类代表二维空间的一个圆.要求两个成员变量.一个是圆心,一 个是半径,提供计算面积的方法. (3) 为上述Cricle类添加一个方法,计算一个点( ...
- Java基础篇:为Box类添加一个方法
尽管创建一个仅包含数据的类是相当不错的事情,但这样的情况很少发生.大部分情况是你将使用方法存取由类定义的实例变量. 事实上,方法定义大多数类的接口.这允许类实现函数可以把内部数据结构的特定布局隐蔽到方 ...
- RegisterUserFunc为测试对象添加新方法或重写已有方法
在实际的自动化脚本开发过程中,发现QTP提供的方法不够用,但幸好QTP的扩展性很强,RegisterUserFunc函数: RegisterUserFunc函数既可以用户自定义函数也可以重写已有的方法 ...
- 你会如何给全局对象添加toString()方法
首先,在讨论如何给所有方法window对象添加toString方法的时候,我们先来说说window的对象继承与对象实例,以及构造函数的this指针,还有变量的提升与方法的调用方式,最终一探window ...
- CC2540 OSAL 学习其中原理,以及 给任务 添加 一个事件(定时发送串口消息)
参考学习大神博客: http://blog.csdn.net/feilusia/article/details/51083953 : http://blog.csdn.net/xiaoleiacmer ...
- Asp.Net MVC4入门指南(3):添加一个视图
在本节中,您需要修改HelloWorldController类,从而使用视图模板文件,干净优雅的封装生成返回到客户端浏览器HTML的过程. 您将创建一个视图模板文件,其中使用了ASP.NET MVC ...
- Entity Framework 的小实例:在项目中添加一个实体类,并做插入操作
Entity Framework 的小实例:在项目中添加一个实体类,并做插入操作 Entity Framework 的小实例:在项目中添加一个实体类,并做插入操作 1>. 创建一个控制台程序 2 ...
- Pixhawk---通过串口方式添加一个自定义传感器(超声波为例)
Pixhawk-添加一个自定义传感器-超声波(串口方式) 1 说明 首先超声波模块是通过串口方式发送(Tx)出数据,使用的模块数据发送周期为100ms,数据格式为: R0034 R0122 R01 ...
- 012.Adding a New Field --【添加一个新字段】
索引: 目录索引 Adding a New Field 添加一个新字段 2016-10-14 3 分钟阅读时长 作者 By Rick Anderson In this section you'll u ...
最新文章
- Linux cuda cudann的安装
- 算法------二叉树的层序遍历
- 免费实现服务器登录手机短信通知
- Web前端开发笔记——第二章 HTML语言 第十节 画布标签、音视频标签
- 产品文档体系结构的思考
- quantum theory
- 牛客网未通过代码---
- e300氛围灯哪里调节_保时捷macan内饰改装升级32色呼吸氛围灯
- 兰州大学2016年初试成绩基本要求
- python测试系列教程 —— 单元测试unittest
- java web ajax异步刷新页面,ajax自动刷新页面有关问题
- mpls--通过全局路由表和静态路由的因特网接入
- 老男孩python作业_老男孩python学习之作业一购物小程序
- AutoHotKey完成ass字幕文件字幕偏移时间修改
- MyEclipse配置jdk
- linux u盘格式化失败怎么办,u盘无法完成格式化怎么办
- python爬取周杰伦歌词_Python 爬取周杰伦 instagram
- 2020最新各大厂面试遇到的100道软件测试面试题+答案纯干货!! 金九银十到了 快点看!!!
- 辞旧迎新,继往开来:2021→2022
- border属性之border-radius
热门文章
- web请求判断客户端类型
- 微软关于XP退役的进一步说明。
- mysql导出数据库数据及表结构
- 研华物联网论坛和ARM技术研讨会随笔
- C++ link2005 error 错误 解决方法汇总(一般重复定义,如果都是不就是 函数定义和实现没有分离)...
- ADO数据库编程详解(C++)----初级入门篇
- pgpool-II的性能缺陷(二)
- vue2.0transition过渡的使用介绍
- [Django学习]第三章 视图和url配置
- GoDaddy万用https ssl证书如何通过DNS审核