题目:
打印万年历,如:
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号的时候,停止打印,
}
}