程序难点 :

    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. [转]easyui data-options的使用

    原文地址:easyui data-options的使用 data-options是jQuery Easyui 最近两个版本才加上的一个特殊属性.通过这个属性,我们可以对easyui组件的实例化可以完全 ...

  2. extjs4.0下的日期控件的星期显示为y的解决办法

    没有修改的时候的问题: 今天第一次写博客,就记录一下以前extjs4.2下运用日期组件的星期显示问题,当时找了n久,可能是extjs4.2才出来没多久,没有多少人发现这个问题或者说很少有人将Extjs ...

  3. char 和 varchar2 区别

    char 与 varchar2 区别 a:char长度固定而varchar2长度可变 b:char的遍历效率要比varchar2的效率稍高 c:char 浪费空间节省时间 varchar2浪费时间节省 ...

  4. Node.js Express 获取request原始数据

    app.use(bodyParser.json());客户端请求接口时如果指名请求头类型 为Content-Type=application/jsonbodyParser 会自动将 body 里的 j ...

  5. struts_22_xwork校验器列表使用说明

    系统提供的校验器列表如下: required (必填校验器,要求field的值不能为null) requiredstring (必填字符串校验器,要求field的值不能为null,并且长度大于0,默认 ...

  6. qlserver、Mysql、Oracle三种数据库的优缺点总结

    这篇文章主要介绍了sqlserver.Mysql.Oracle三种数据库的优缺点总结,需要的朋友可以参考下   一.sqlserver优点:易用性.适合分布式组织的可伸缩性.用于决策支持的数据仓库功能 ...

  7. OpenStack 镜像制作

    Contents [hide] 1 Centos6.5 img制作 1.1 基础环境安装 1.2 下载或从本地上传系统镜像 1.3 启动服务 1.4 建立镜像文件 1.5 通过virt-install ...

  8. JavaScript 闭包整合

    初遇闭包感觉很困惑,上网查看了些许介绍,有很多没看懂,就想先对能懂的东西整整 首先觉得要了解闭包,要先对一.JavaScript的变量作用域和作用域链有基本了解 1.变量的作用域分为:全局变量和局部变 ...

  9. Objective-C语言的面向对象特性

    Objective-C作为一种面向对象的编程语言,具有面向对象的基本特征,即:封装.继承和多态.主要介绍Objective-C中有关面向对象基本概念:类.对象.方法和属性等. 类是Objective- ...

  10. js回调函数(callback)理解

    Mark! js学习 不喜欢js,但是喜欢jquery,不解释. 自学jquery的时候,看到一英文词(Callback),顿时背部隐隐冒冷汗.迅速google之,发现原来中文翻译成回调.也就是回调函 ...