万年历---java版
程序难点 :
1. 每年每个月有多少天?
2. 每个月的1号是星期几?
3. 每年的2月份是多少天?
难点解析 :
1. 每年每个月除去1 3 5 7 8 10 12是31天以外, 其他月份(除去2月)都是30天.
2. 根据java提供的Calendar的DAY_OF_WEEK来获取. c.get(Calendar.DAY_OF_WEEK);
注意, 在国外每周的第一天是周日,所以它的对应关系为
1 2 3 4 5 6 7
日 一 二 三 四 五 六
3. 平年28天, 闰年29天.
注意 : 闰年是可以被4整除或者能被100整除也可被400整除, 平年是能被100整除而不能被400整除.
JAVA 代码 :
/**
* 31天的月份
*/
private static final List<Integer> singleMonList = new ArrayList<Integer>(); static{
singleMonList.add(0);
singleMonList.add(2);
singleMonList.add(4);
singleMonList.add(6);
singleMonList.add(7);
singleMonList.add(9);
singleMonList.add(11);
} public static void calendarYear(int year){
Calendar c = Calendar.getInstance();
c.set(Calendar.YEAR, year);
System.out.println("-----------------------------"+year+"年start------------------------------");
for (int i = 0; i < 12; i++) {
System.out.println();
System.out.println(year + "年" + (i + 1) + "月");
System.out.println();
System.out.println("日\t" + "一\t" + "二\t" + "三\t" + "四\t"+ "五\t" + "六");
c.set(Calendar.MONTH, i);
c.set(Calendar.DATE, 1);
int week = c.get(Calendar.DAY_OF_WEEK);
int weekTemp = week - 1;
int days = getMonthOfDays(year, i); // 获取天数
// 天数打印
for (int j = 1; j <= days; j++) {
if (j == 1){
getBlank(weekTemp); // 打印空格
}
if (weekTemp == 7) { //换行
System.out.println();
if (j < 10) {
System.out.print(" " + j + "\t");
} else {
System.out.print(j + "\t");
}
weekTemp = 1;
} else {
if (j < 10) {
System.out.print(" " + j + "\t");
} else {
System.out.print(j + "\t");
}
weekTemp++;
}
}
System.out.println();
System.out.println();
System.out.println();
}
System.out.println("-----------------------------"+year+"年end------------------------------");
} private static void getBlank(int blankNum) {
for (int i = 0; i < blankNum; i++) {
System.out.print(" \t");
}
} private static int getMonthOfDays(int year, int month) {
int days = 0;
if (singleMonList.contains(month)) {
days = 31;
} else {
if (month == 1) {
if (((year % 100 != 0) && (year % 4 == 0))
|| ((year % 100 == 0) && (year % 400 == 0))) {
days = 29;
} else {
days = 28;
}
} else {
days = 30;
}
}
return days;
} private static boolean checkYear(int year){
if(year>Long.MAX_VALUE){
return false;
}
if(year < Long.MIN_VALUE){
return false;
}
return true;
} @SuppressWarnings("resource")
public static void main(String[] args) throws Exception { while(true){
System.out.print("请输入年份 (1: 退出程序): ");
Scanner sc = new Scanner(System.in);
Integer year = sc.nextInt();
if(!checkYear(year)) {
continue;
}
if(year==1) System.exit(0);
calendarYear(year);
}
}
注 : 基本上解决了上述三个难点, 这个程序就可以迎刃而解. 其他的就是一些显示上的排版.
万年历---java版的更多相关文章
- ArcGIS Server 10 Java 版的Rest服务手动配置方法
Java版的Manager中发布的服务默认只发布了该服务的SOAP接口,而REST接口需要用户在信息服务器,如Tomcat. Apache.WebLogic等中手工配置.由于在Java版的Server ...
- PetaPojo —— JAVA版的PetaPoco
背景 由于工作的一些原因,需要从C#转成JAVA.之前PetaPoco用得真是非常舒服,在学习JAVA的过程中熟悉了一下JAVA的数据组件: MyBatis 非常流行,代码生成也很成熟,性能也很好.但 ...
- 【转载】java版打字练习软件
网上找到一个java版的打字的游戏 import java.applet.Applet; import java.applet.AudioClip; import java.awt.Dimension ...
- 微博地址url(id)与mid的相互转换 Java版
原理: 新浪微博的URL都是如:http://weibo.com/2480531040/z8ElgBLeQ这样三部分. 第一部分(绿色部分)为新浪微博的域名,第二部分(红色部分)为博主Uid,第三部分 ...
- JCEF3——谷歌浏览器内核Java版实现(一):使用jawt获取窗体句柄
前言 最近一段时间研究谷歌浏览器内核.谷歌浏览器内核一直开源,并维护更新,它的开源项目中内核更新速度和Chrome浏览器版本更新进度一样!而且它不同于WebKit(值得一题的是谷歌浏览器已不使用Web ...
- Selenium关键字驱动测试框架Demo(Java版)
Selenium关键字驱动测试框架Demo(Java版)http://www.docin.com/p-803493675.html
- 第九篇 :微信公众平台开发实战Java版之如何实现自定义分享内容
第一部分:微信JS-SDK介绍 微信JS-SDK是微信公众平台面向网页开发者提供的基于微信内的网页开发工具包. 通过使用微信JS-SDK,网页开发者可借助微信高效地使用拍照.选图.语音.位置等手机系统 ...
- 第八篇 :微信公众平台开发实战Java版之如何网页授权获取用户基本信息
第一部分:微信授权获取基本信息的介绍 我们首先来看看官方的文档怎么说: 如果用户在微信客户端中访问第三方网页,公众号可以通过微信网页授权机制,来获取用户基本信息,进而实现业务逻辑. 关于网页授权回调域 ...
- 第七篇 :微信公众平台开发实战Java版之如何获取微信用户基本信息
在关注者与公众号产生消息交互后,公众号可获得关注者的OpenID(加密后的微信号,每个用户对每个公众号的OpenID是唯一的.对于不同公众号,同一用户的openid不同). 公众号可通过本接口来根据O ...
随机推荐
- Android -- 背景虚化
1,在项目中我们常有这样的需求,就是在个人中心的时候,当用户登录后,要显示用户登陆后的头像,然后背景是用户头像的虚化 ,接下来就来实现一下这个功能,先看一下效果 2,实现起来也挺简单的,没什么难度 , ...
- 3D语音天气球(源码分享)——创建可旋转的3D球
开篇废话: 在9月份时参加了一个网站的比赛,比赛的题目是需要使用第三方平台提供的服务做出创意的作品. 于是我选择使用语音服务,天气服务,Unity3D,Android来制作一个3D语音天气预报,我给它 ...
- paper 33 :[教程] 如何使用libsvm进行分类
文章来源:http://www.matlabsky.com/thread-12379-1-1.html 这篇文章的讲解的真的是言简意赅,很简单的例子就把这个入门的门槛降低了不少,目前的情况是,我都晓得 ...
- PTPX中的time_based analysis
根据VCD文件的type,PTPX支持instantaneous peak power analysis和cycle_accurate peak power analysis. Time-Based ...
- ajax讲解:“创建用户”和“用户登录”练习
ajax可以在不重新加载整个网页的情况下,对网页的某部分进行更新. 传统的网页(不使用 AJAX)如果需要更新内容,必须重载整个网页页面. 接下来,将以例子的形式进行讲解 例一:创建用户 ...
- origin 8.5 曲线拟合,延长曲线范围
1. 输入数据并选择Y轴数据 2 非线性拟合 Analysis—Fitting—Nonlinear Curve Fit—Open Dialog 3.选择拟合曲线类型 在origin7.5中选择曲线类型 ...
- OpenStack fuel-web不可用解决办法
Contents [hide] 1 为增加一台计算节点 2 磁盘清空 3 启动占用8001端口的进程 4 启动占用5432端口的进程 为增加一台计算节点 打开fuel-web,发现无法打开,弹出ngi ...
- Android webview实现上传图片的效果(图片压缩)
mainactivity代码 package com.bwie.webviewupload; import java.io.ByteArrayInputStream; import java.io.B ...
- android 学习随笔十五(Activity的生命周期与摧毁时返回数据 )
1.Activity的生命周期 onCreate:创建时调用 onStart:在屏幕上可见,但是还没有获得焦点 onResume:可见并且获得焦点 onPause:可见,但是失去焦点 onStop:不 ...
- Delphi 调用 Rest 服务的一些
1.关于数据接收的格式 测试发现获取的json源数据中间汉字的地方是乱码,导致引号不配对,引发内存错误. TIdHttp在获取数据之前,要将定义的TStringStream的Encoding设置为UT ...