用java输出某年某月的日历页,通过键盘输入年份和月份。
时间: 2024-03-16 20:44:37 浏览: 25
好的,以下是Java代码实现:
```
import java.util.Scanner;
public class Calendar {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入年份:");
int year = scanner.nextInt();
System.out.print("请输入月份:");
int month = scanner.nextInt();
// 计算当月第一天是星期几
int firstDayOfWeek = getFirstDayOfWeek(year, month);
// 打印日历页头部
printCalendarHeader(year, month);
// 打印日历页主体
printCalendarBody(firstDayOfWeek, getDaysOfMonth(year, month));
}
/**
* 获取某年某月的天数
*/
private static int getDaysOfMonth(int year, int month) {
int[] monthDays = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
if (month == 2 && isLeapYear(year)) {
return 29;
}
return monthDays[month - 1];
}
/**
* 判断某年是否为闰年
*/
private static boolean isLeapYear(int year) {
return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
}
/**
* 获取某年某月第一天是星期几
*/
private static int getFirstDayOfWeek(int year, int month) {
int[] monthDays = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
// 计算1900年1月1日至当年当月1日的天数
int days = 0;
for (int i = 1900; i < year; i++) {
days += isLeapYear(i) ? 366 : 365;
}
for (int i = 1; i < month; i++) {
days += monthDays[i - 1];
if (i == 2 && isLeapYear(year)) {
days++;
}
}
// 计算当月1日是星期几
return (days + 1) % 7;
}
/**
* 打印日历页头部
*/
private static void printCalendarHeader(int year, int month) {
System.out.println(String.format("%d年%d月", year, month));
System.out.println("日 一 二 三 四 五 六");
}
/**
* 打印日历页主体
*/
private static void printCalendarBody(int firstDayOfWeek, int daysOfMonth) {
int dayCount = 1;
// 打印第一行
for (int i = 0; i < firstDayOfWeek; i++) {
System.out.print(" ");
}
for (int i = firstDayOfWeek; i < 7; i++) {
System.out.print(String.format("%2d ", dayCount));
dayCount++;
}
System.out.println();
// 打印其它行
while (dayCount <= daysOfMonth) {
for (int i = 0; i < 7; i++) {
if (dayCount <= daysOfMonth) {
System.out.print(String.format("%2d ", dayCount));
dayCount++;
} else {
System.out.print(" ");
}
}
System.out.println();
}
}
}
```
使用时,通过键盘输入年份和月份,程序会输出该月的日历页。