用java写一个万年历程序
时间: 2023-10-10 13:10:20 浏览: 137
下面是一个简单的Java万年历程序的示例代码:
```java
import java.util.Scanner;
public class CalendarProgram {
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 firstDayOfWeek = getFirstDayOfWeek(year, month);
// 打印日历头部
System.out.println("日\t一\t二\t三\t四\t五\t六");
// 打印前面的空格
for (int i = 0; i < firstDayOfWeek; i++) {
System.out.print("\t");
}
// 打印日期
int daysInMonth = getDaysInMonth(year, month);
for (int day = 1; day <= daysInMonth; day++) {
System.out.print(day + "\t");
if ((day + firstDayOfWeek) % 7 == 0) {
System.out.println();
}
}
}
public static int getFirstDayOfWeek(int year, int month) {
// 使用Zeller公式计算给定年份和月份的第一天是星期几
if (month < 3) {
month += 12;
year--;
}
int century = year / 100;
int yearOfCentury = year % 100;
int weekDay = (yearOfCentury + yearOfCentury / 4 + century / 4 - 2 * century + 26 * (month + 1) / 10) % 7;
// 将周日(0)转换为周一(1)到周六(6)
return (weekDay + 7) % 7 + 1;
}
public static int getDaysInMonth(int year, int month) {
// 计算给定年份和月份的天数
int daysInMonth;
// 判断是否为闰年
if (month == 2 && isLeapYear(year)) {
daysInMonth = 29;
} else {
switch (month) {
case 4:
case 6:
case 9:
case 11:
daysInMonth = 30;
break;
default:
daysInMonth = 31;
}
}
return daysInMonth;
}
public static boolean isLeapYear(int year) {
// 判断是否为闰年
return year % 400 == 0 || (year % 4 == 0 && year % 100 != 0);
}
}
```
这个程序接受用户输入的年份和月份,并打印出对应的万年历。它使用了Zeller公式来计算给定年份和月份的第一天是星期几,然后根据每个月的天数打印出日历。程序还包含了一个`isLeapYear`方法来判断是否为闰年,以及`getDaysInMonth`方法来获取给定年份和月份的天数。
您可以运行这个程序并输入年份和月份来查看对应的万年历。希望能对您有所帮助!
阅读全文