程序难点 :

    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版的更多相关文章

  1. ArcGIS Server 10 Java 版的Rest服务手动配置方法

    Java版的Manager中发布的服务默认只发布了该服务的SOAP接口,而REST接口需要用户在信息服务器,如Tomcat. Apache.WebLogic等中手工配置.由于在Java版的Server ...

  2. PetaPojo —— JAVA版的PetaPoco

    背景 由于工作的一些原因,需要从C#转成JAVA.之前PetaPoco用得真是非常舒服,在学习JAVA的过程中熟悉了一下JAVA的数据组件: MyBatis 非常流行,代码生成也很成熟,性能也很好.但 ...

  3. 【转载】java版打字练习软件

    网上找到一个java版的打字的游戏 import java.applet.Applet; import java.applet.AudioClip; import java.awt.Dimension ...

  4. 微博地址url(id)与mid的相互转换 Java版

    原理: 新浪微博的URL都是如:http://weibo.com/2480531040/z8ElgBLeQ这样三部分. 第一部分(绿色部分)为新浪微博的域名,第二部分(红色部分)为博主Uid,第三部分 ...

  5. JCEF3——谷歌浏览器内核Java版实现(一):使用jawt获取窗体句柄

    前言 最近一段时间研究谷歌浏览器内核.谷歌浏览器内核一直开源,并维护更新,它的开源项目中内核更新速度和Chrome浏览器版本更新进度一样!而且它不同于WebKit(值得一题的是谷歌浏览器已不使用Web ...

  6. Selenium关键字驱动测试框架Demo(Java版)

    Selenium关键字驱动测试框架Demo(Java版)http://www.docin.com/p-803493675.html

  7. 第九篇 :微信公众平台开发实战Java版之如何实现自定义分享内容

    第一部分:微信JS-SDK介绍 微信JS-SDK是微信公众平台面向网页开发者提供的基于微信内的网页开发工具包. 通过使用微信JS-SDK,网页开发者可借助微信高效地使用拍照.选图.语音.位置等手机系统 ...

  8. 第八篇 :微信公众平台开发实战Java版之如何网页授权获取用户基本信息

    第一部分:微信授权获取基本信息的介绍 我们首先来看看官方的文档怎么说: 如果用户在微信客户端中访问第三方网页,公众号可以通过微信网页授权机制,来获取用户基本信息,进而实现业务逻辑. 关于网页授权回调域 ...

  9. 第七篇 :微信公众平台开发实战Java版之如何获取微信用户基本信息

    在关注者与公众号产生消息交互后,公众号可获得关注者的OpenID(加密后的微信号,每个用户对每个公众号的OpenID是唯一的.对于不同公众号,同一用户的openid不同). 公众号可通过本接口来根据O ...

随机推荐

  1. gson使用注意事项

    public static Object toBean(String jsonString, Class<?> beanclass) { GsonBuilder gsonb = new G ...

  2. paper 71 :图像清晰化

    图像清晰度是衡量图像品质优劣的标准之一,清晰的图像能给人以赏心悦目的视觉享受.长期以来,图像扫描设备和图像处理软件的开发生产厂商都很重视图像清晰度处理功能的开发,图像处理人员也在日常的实践中不断摸索出 ...

  3. RMAN基础知识补充

    一.FORMAT字符串替代变量 使用FORMAT参数时可使用的各种替换变量,如下: %c :备份片的拷贝数(从1开始编号): %d :数据库名称: %D :位于该月中的天数 (DD): %M :位于该 ...

  4. 夺命雷公狗---DEDECMS----6快速入门之总结篇

    我们dedecms四大表分别是: dede_channeltype(模型表) dede_arctype(栏目表) dede_archives(文章主表) dede_addonXXXX(附加表) 使用d ...

  5. 使用Graham扫描法求二维凸包的一个程序

    #include <iostream> #include <cstring> #include <cstdlib> #include <cmath> # ...

  6. yum源的修改

    源路径: /etc/yum.repos.d/ 配置文件: 网络搜索 CentOS-Base.repo(默认) 设备搜索 CentOS-Media.repo 将CentOS-Base.repo移除或改名 ...

  7. css中的选择器

    选择器            说明    *                通用元素选择器,匹配任何元素    E                标签选择器,匹配所有使用E标签(所有HTML元素)的元 ...

  8. Linux内核配置机制(make menuconfig 、Kconfig、Makefile)讲解【转】

    本文转载自:http://www.codexiu.cn/linux/blog/34801/ 前面我们介绍模块编程的时候介绍了驱动进入内核有两种方式:模块和直接编译进内核,并介绍了模块的一种编译方式—— ...

  9. 161118、linux(centos) 项目部署阶段相关命令汇总

    1.ssh免密码登陆 主要命令 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys-->添加公钥 service sshd restart ...

  10. 10 个迅速提升你 Git 水平的提示【转】

    转自:https://www.oschina.net/translate/10-tips-git-next-level 最近我们推出了两个教程:熟悉Git的基本功能和让你在开发团队中熟练的使用Git  ...