程序难点 :

    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. ruby初步学习中遇到的错误

    print <<off This is the second way of creating here document ie. multiple line string; off 报错: ...

  2. PHP上传图片时,如何判断上传的文件是否为可用的图片文件

    利用getimagesize函数: function isImage($filename){$types = '.gif|.jpeg|.png|.bmp';//定义检查的图片类型if(file_exi ...

  3. springday04-go2

    练习:计算一个人的bmi指数.算法如下: 身高 单位是米 比如1.70 体重 单位是公斤 比如90 bmi指数 = 体重/身高/身高 如果bmi>24过重,否则正常.视图需要两个,一个是bmi_ ...

  4. sql 根据一个表更新 另一个表的例子及可能遇到的问题

    例子: update a set a.name=b.name1 from a,b where a.id=b.id 例子延伸:更新的时候会把字符串 转为科学计数法  怎么办? 答:用 cast 转换一下 ...

  5. scan cell

    scan cell有两种不同的input: 1)data input:由电路的combinational logic驱动: 2)scan input:由另一个scan cell驱动,从而形成scan  ...

  6. Power Gating的设计(模块二)

    针对lower power的验证,由cpf/upf来建模,包括: 1)power gating的功能模型(在power gate之后将output force为x) 2)isolation功能模型: ...

  7. 用javascript在客户端删除某一个cookie键值对

    下面这个方法展示如何在客户端浏览器上用javascript删除某一个cookie键值对. //用javascript删除某一个cookie的方法,该方法传入要删除cookie的名称 function ...

  8. Fury观后感

    刚看完,淋雨汽车回来的,电影很精彩.前期略慢热(我还去了躺厕所),军人的黑色幽默,冷酷的军旅生活作为基调.内容我就不ao述了,新兵蛋诺曼的经历是这部电影的为主线(也有人说诺曼是观众的代入点,准确来说他 ...

  9. Chrome常用快捷键

    F2F3 下一个标签 Ctrl+1-9 切换标签 Ctrl+W 关闭 Ctrl+D 保存书签 Ctrl+T 新建书签然后地址栏输入搜索 Ctrl+Shft+T 打开上次关闭 空格 下翻页 Ctrl+J ...

  10. 使用Application Loader打包上传AppStore流程

    配置完你的证书,Bundle Identifier 和描述文件的配置 然后配置工程打开你项目工程 第一步,这里不能选择模拟器,选择iOS Device 如果不支持横屏,把这2个勾去掉 然后查看版本号和 ...