用Java写一个万年历程序
时间: 2023-10-10 10:16:04 浏览: 128
用JAVA写的万年历程序
以下是一个简单的Java万年历程序,可以根据输入的年份和月份输出对应的日历,包括每个月的天数和周几:
```java
import java.util.Scanner;
public class Calendar {
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();
input.close();
printCalendar(year, month);
}
public static void printCalendar(int year, int month) {
int monthDays = getMonthDays(year, month);
int weekDay = getWeekDay(year, month, 1);
System.out.printf("%d年%d月\n", year, month);
System.out.println("日\t一\t二\t三\t四\t五\t六");
for (int i = 1; i <= weekDay; i++) {
System.out.print("\t");
}
for (int i = 1; i <= monthDays; i++) {
System.out.printf("%d\t", i);
if ((weekDay + i) % 7 == 0) {
System.out.println();
}
}
}
public static int getMonthDays(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];
}
public static int getWeekDay(int year, int month, int day) {
if (month < 3) {
month += 12;
year--;
}
int weekDay = (day + 2 * month + 3 * (month + 1) / 5 + year + year / 4 - year / 100 + year / 400) % 7;
return (weekDay + 1) % 7;
}
public static boolean isLeapYear(int year) {
return (year % 4 == 0 && year % 100 != 0) || year % 400 == 0;
}
}
```
在程序中,我们定义了四个方法:
- `printCalendar(int year, int month)`:根据输入的年份和月份输出对应的日历。
- `getMonthDays(int year, int month)`:根据输入的年份和月份获取该月的天数,注意闰年2月有29天。
- `getWeekDay(int year, int month, int day)`:根据输入的年份、月份和日期获取该日期是星期几,这里使用了Zeller公式计算。
- `isLeapYear(int year)`:判断输入的年份是否为闰年。
在`main()`方法中,我们使用`Scanner`类从标准输入中读取年份和月份,然后调用`printCalendar()`方法输出对应的日历。
阅读全文