程序难点 :

    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. 构造器Constructor是否可被override?

    构造器Constructor是否可被override? 构造器Constructor不能被继承,因此不能重写Overriding,但可以被重载Overloading.

  2. Apache与Nginx虚拟主机设置(多域名和多端口的区别)

    为了方便管理虚拟主机,应该尽量少修改主配置文件http.conf或者nginx.conf,大部分修改变更都在虚拟主机片配置文件httpd- vhost.conf或者vhost.conf中完成,这样有利 ...

  3. sql xpath 查找包含

    select xcontent.query('/root//*[contains(text()[1], ''中'')]'), column1 from table

  4. Android 5.0新特性了解(一)----TabLayout

    1.在2015年的google大会上,google发布了新的Android Support Material Design库,里面包含了几个新的控件,其中就有一个TabLayout,它就可以完成Tab ...

  5. Left Join 与Right Join 与 Inner Join 与 Full Join的区别

    首先看看Left Join 与Right Join 与 Inner Join 与 Full Join对表进行操作后得到的结果. 在数据库中新建两张表,并插入要测试的数据. 新建表: USE [Test ...

  6. UIView属性及方法

    @property(nonatomic) CGFloat alpha //设置视图的透明度 //透明度的设置从最小0.0到1.0 ,1.0为完全不透明, //其中这个属性只影响当前视图,并不会影响其子 ...

  7. PHPCMS V9 学习总结

    在实现PHPCMS网站过程中,根据业务需求,我们遇到很多问题,特此总结如下,以便大家参考学习. [1]PHPCMS V9系统目录简析 在研究所有问题之前,请先了解一下系统的文件目录结构,具体如下图所示 ...

  8. h3c 交换机配置VLAN和远程管理

    一.基本设置 1. console线连接成功 2. 进入系统模式 <H3C>system-view //提示符由<H3C> 变为 [H3C] 3. 更改设备名称 [H3C]sy ...

  9. Spring的beans标签下可以有其他标签

    以前有对xsd(也就是schema文件)小做研究,有个小困惑,就是我们定义的元素只能使用定义的哪一些标签,比如<beans>下面就只能有自定义的哪一些,那为什么在引入<context ...

  10. nexus启动不了

    nexus一分钟前还能正常启动,突然就启动不了,看了下启动文件,变成0KB就知道什么问题了,文件被系统洗了. 解决方案:重新解压缩文件包里复制一个过来.