以下是一个简单的Java实现万年历的代码示例:
```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();
printCalendar(year, month);
}
public static void printCalendar(int year, int month) {
int totalDays = getDaysOfMonth(year, month);
int firstDayOfWeek = getFirstDayOfWeek(year, month);
System.out.println("日 一 二 三 四 五 六");
// 打印月份第一天之前的空格
for (int i = 0; i < firstDayOfWeek; i++) {
System.out.print(" ");
}
// 打印日期
for (int i = 1; i <= totalDays; i++) {
System.out.printf("%2d ", i);
// 换行
if ((i + firstDayOfWeek) % 7 == 0) {
System.out.println();
}
}
}
public static int getDaysOfMonth(int year, int month) {
int[] daysOfMonth = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
// 判断闰年
if (isLeapYear(year) && month == 2) {
return 29;
}
return daysOfMonth[month - 1];
}
public static int getFirstDayOfWeek(int year, int month) {
// 使用 Zeller公式计算星期几
if (month < 3) {
month += 12;
year--;
}
int century = year / 100;
year %= 100;
int dayOfWeek = (year + year / 4 + century / 4 - 2 * century + 26 * (month + 1) / 10) % 7;
// 转换为星期日起始的数字
return (dayOfWeek + 7) % 7;
}
public static boolean isLeapYear(int year) {
return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
}
}
```
使用Scanner类获取用户输入的年份和月份,然后调用`printCalendar()`方法打印万年历。`printCalendar()`方法内部使用`getDaysOfMonth()`方法获取指定月份的天数,`getFirstDayOfWeek()`方法获取指定年份和月份的第一天是星期几。最后,使用循环打印出万年历的日历部分。