编写一个java代码,输入年份和月份值,生成并输出该月的日历。如 果输入的值不合理,则输出error 例如,输入2020和1,则生成2020年1月的日历
时间: 2023-06-11 08:07:54 浏览: 90
以下是一个简单的Java程序,实现了输入年份和月份值,生成并输出该月的日历功能。如果输入的值不合理,则输出“error”。
```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();
if (year < 1 || month < 1 || month > 12) {
System.out.println("error");
return;
}
int days = getDaysOfMonth(year, month);
int firstDayOfWeek = getFirstDayOfWeek(year, month);
System.out.println("日\t一\t二\t三\t四\t五\t六");
for (int i = 1; i < firstDayOfWeek; i++) {
System.out.print("\t");
}
for (int i = 1; i <= days; i++) {
System.out.print(i + "\t");
if ((firstDayOfWeek + i - 1) % 7 == 0) {
System.out.println();
}
}
}
private static int getDaysOfMonth(int year, int month) {
int[] daysOfMonth = {31,28,31,30,31,30,31,31,30,31,30,31};
if (month == 2 && isLeapYear(year)) {
return 29;
}
return daysOfMonth[month - 1];
}
private static int getFirstDayOfWeek(int year, int month) {
int days = 0;
for (int i = 1; i < year; i++) {
days += isLeapYear(i) ? 366 : 365;
}
for (int i = 1; i < month; i++) {
days += getDaysOfMonth(year, i);
}
return (days + 1) % 7 + 1;
}
private static boolean isLeapYear(int year) {
return year % 400 == 0 || (year % 4 == 0 && year % 100 != 0);
}
}
```
程序中使用了三个方法:
- `getDaysOfMonth(year, month)`:根据给定的年份和月份,返回该月的天数。
- `getFirstDayOfWeek(year, month)`:根据给定的年份和月份,返回该月的第一天是星期几。
- `isLeapYear(year)`:判断给定的年份是否为闰年。
程序中使用了一个数组来存储每个月的天数。在 `getDaysOfMonth(year, month)` 方法中,如果给定的月份是 2 月,并且给定的年份是闰年,则将该月的天数设为 29。
在 `getFirstDayOfWeek(year, month)` 方法中,先计算出给定的年份之前所有年份的天数,再加上给定的月份之前所有月份的天数,最后计算出该月的第一天是星期几。
在 `main` 方法中,首先读取用户输入的年份和月份。如果输入的值不合理,则输出“error”。否则,调用 `getDaysOfMonth(year, month)` 和 `getFirstDayOfWeek(year, month)` 方法分别计算出该月的天数和第一天是星期几,并输出日历表格。
输出的日历表格格式如下:
```
日 一 二 三 四 五 六
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
```
阅读全文