java初学乍练之用Calendar打印万年历

论坛 期权论坛 脚本     
匿名网站用户   2020-12-21 05:31   148   0

题目:

打印万年历,如:

2018年 4月 日历
日 一 二 三 四 五 六
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28

29 30

思路:

Calendar中有很多时间属性, 合理的调用他们可以让打印日历更简单.

代码:

import java.util.*;
class PerpetialCalendar{
 public static void main(String[] args)throws Exception{
  Scanner sc1 = new Scanner(System.in);
  Scanner sc2 = new Scanner(System.in);
  Calendar c = Calendar.getInstance();
  System.out.println("请输入年份:");
  int y = c.get(Calendar.YEAR);
  try{
   y = sc1.nextInt();//键盘输入如果不是数字则会出现异常
  }catch(Exception ey){
   y = c.get(Calendar.YEAR);//出现异常则打印本年日历
   System.out.println("年份输入异常!将打印"+y+"年的日历");
  }
  System.out.println("请输入月份:");
  int m = 1;
  try{
   m = sc2.nextInt()-1;//两个Scanner对象可将年份异常和月份异常分开对待
   if (m<0 || m>11) throw new Exception();//如果月份输入其他数字,也抛出异常
  }catch(Exception ep){
   m = c.get(Calendar.MONTH);//出现异常则打印本月日历
   System.out.println("月份输入异常!将打印"+(m+1)+"月的日历");
  }
  c.set(y, m, 1);//设置需打印的日历
  System.out.println(String.format("\t\t%d年 %d月  日历", y, m+1));//日历标题
  System.out.println("日\t一\t二\t三\t四\t五\t六");//打印日历头
  for(int i=0; i<c.get(Calendar.DAY_OF_WEEK)-1; i++){//打印每月1号前的空格,
   System.out.print("\t");
  }
  do{
   System.out.print(String.format("%2d\t", c.get(Calendar.DAY_OF_MONTH)));//打印日期,打一个跳个table
   c.add(Calendar.DAY_OF_MONTH, 1);  //打印一天, 加一天
   if(c.get(Calendar.DAY_OF_WEEK)==1){  //遇到星期天就换行
    System.out.println();
   } 
  }while(c.get(Calendar.DAY_OF_MONTH)!=1); //当日期重新变回1号的时候,停止打印,
 }
 
}

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:1136255
帖子:227251
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP