问题描述
问题描述
已知2007年1月1日为星期一。设计一函数按照下述格式打印2007年以后(含)某年某月的日历,2007年以前的拒绝打印。为完成此函数,设计必要的辅助函数也是必要的。
样例输入
一个满足题目要求的输入范例。
例:
2050 3
输出
解题思路
1.要搞清输入的日期的那个月份1号是星期几
2.寻找日历1号的那个位置,星期几就在前面打印几个空位置
3.找到打印1号的位置了,计算出这个月有多少天(单月双月,平年闰年)
4.从1号一直打印到这个月的天数,满7换一行
参考代码
package 日历打印;
import java.util.Calendar;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
//接受输入年月份
Scanner sr = new Scanner(System.in);
int year = sr.nextInt();
int month = sr.nextInt();
//根据输入的年份设置年月日
Calendar result = Calendar.getInstance();
result.set(year, month-1 , 1);
//获取这个月1号是星期几
int Frist_DAY_OF_WEEK = result.get(result.DAY_OF_WEEK)-1;
//输出表头
System.out.println("Calendar"+" "+year+" - "+fm(month));
System.out.println("---------------------");
System.out.println("Su Mo Tu We Th Fr Sa");
System.out.println("---------------------");
//打印前面空白
for (int i = 0; i < Frist_DAY_OF_WEEK; i++) {
System.out.print(" ");
}
//获取这个月有多少天
int countDay = result.getActualMaximum(result.DAY_OF_MONTH);
for (int i = 1,j = Frist_DAY_OF_WEEK+1 ; i <= countDay; i++,j++) {
System.out.printf("%2d ",i);
if(j%7==0)System.out.println();
}
System.out.println();
System.out.println("---------------------");
}
private static String fm(int i) {
//月份单位数补0
if(i < 10)return "0"+i;
else return i+"";
}
}