已知1900年1月1日是星期一,要求打印输入年月的日历。
输出结果格式:
日 一 二 三 四 五 六
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类的实例对象
- 设置时间
- 利用Calendar类来得到1号的星期和月的天数
- 控制格式打印日历
参考源码如下:
import java.util.Calendar;
import java.util.Scanner;
public class MyCalendar {
public static void main(String[] args) {
Calendar calendar = Calendar.getInstance();
int date = 0; // 存放输入的年月后计算得到的1号的星期
int day_max = 0;// 存放输入的年月的月的天数
int year = 0;// 用来保存输入的年份
int month = 0;// 用来保存输入的月份
Scanner in = new Scanner(System.in);
System.out.print("请输入年份:");
year = in.nextInt();
System.out.print("请输入月份:");
month = in.nextInt();
System.out.println("输入的日期为:" + year + "-" + month);
in.close();
// 将月份置为下月1号,往前一天,先得到当前月有多少天
calendar.set(Calendar.YEAR, year);
calendar.set(Calendar.MONTH, month);
calendar.set(Calendar.DATE, 1);
calendar.add(Calendar.DATE, -1);
day_max = calendar.get(Calendar.DATE);
// 再将时间设置为1号,是星期几,星期日是0,星期一是1,依次类推
calendar.add(Calendar.DATE, -(day_max - 1));
date = calendar.get(Calendar.DAY_OF_WEEK) - 1;
System.out.println(calendar.getTime());
printfCalendar(date, day_max);
}
/**
* 功能:打印一个日历
* @param start 该月1号是星期几
* @param day_max 该月有多少天
*/
public static void printfCalendar(int start, int day_max) {
System.out.println(
"==================================================");
// 输出表头
System.out.print("日\t一\t二\t三\t四\t五\t六\n");
int day = 1;// 打印的天数
month: for (int i = 0; i < 6; i++) {
for (int j = 0; j < 7; j++) {
// 打印第一行的时候,空出前start个空间
if (i == 0 && j < start) {
System.out.print("\t");
// 跳出当前次循环
continue;
}
if (day > day_max) {
System.out.println();
break month;
}
System.out.print(day + "\t");
day++;
}
// 打印完一行后换行
System.out.println();
} // for month
System.out.println(
"==================================================");
}
}
运行结果:
其他方式:JAVA练习:利用JAVA基本语句实现打印日历