请编写一个打印月历的程序,该程序在任意输入年份和月份后能打印出该年该月的月历。
时间: 2023-04-21 08:02:24 浏览: 135
好的,以下是一个简单的打印月历的程序:
1. 首先,让用户输入年份和月份。
2. 然后,根据输入的年份和月份计算出该月的天数和该月第一天是星期几。
3. 接着,打印出月历的表头,包括月份和星期几的标头。
4. 然后,按照日期顺序打印出该月的每一天,注意对齐和换行。
5. 最后,结束程序。
下面是一个示例代码,供参考:
```
import java.util.Scanner;
public class PrintCalendar {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
// 获取用户输入的年份和月份
System.out.print("请输入年份:");
int year = input.nextInt();
System.out.print("请输入月份:");
int month = input.nextInt();
// 计算该月的天数和第一天是星期几
int days = getDaysOfMonth(year, month);
int firstDayOfWeek = getFirstDayOfWeek(year, month);
// 打印月历的表头
System.out.println(" " + getMonthName(month) + " " + year);
System.out.println("------------------------------");
System.out.println(" Sun Mon Tue Wed Thu Fri Sat");
// 打印该月的每一天
int day = 1;
for (int i = 0; i < 6; i++) {
for (int j = 0; j < 7; j++) {
if (i == 0 && j < firstDayOfWeek) {
System.out.print(" ");
} else if (day > days) {
break;
} else {
System.out.printf("%4d", day);
day++;
}
}
System.out.println();
}
}
// 获取指定年份和月份的天数
public static int getDaysOfMonth(int year, int month) {
int days = 0;
switch (month) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
days = 31;
break;
case 4:
case 6:
case 9:
case 11:
days = 30;
break;
case 2:
if (isLeapYear(year)) {
days = 29;
} else {
days = 28;
}
break;
}
return days;
}
// 获取指定年份和月份的第一天是星期几
public static int getFirstDayOfWeek(int year, int month) {
int day = 1;
int y = year - (14 - month) / 12;
int m = month + 12 * ((14 - month) / 12) - 2;
int d = (day + y + y / 4 - y / 100 + y / 400 + (31 * m) / 12) % 7;
return d;
}
// 判断指定年份是否为闰年
public static boolean isLeapYear(int year) {
return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
}
// 获取指定月份的名称
public static String getMonthName(int month) {
String[] monthNames = {"", "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"};
return monthNames[month];
}
}
```