java编写程序:输入年份和月份值,牛成并输出该月的日历的值不合理,则牺出 error。如果输入例如,2020和1,则生成2020年1月的日历表
时间: 2023-06-13 08:03:18 浏览: 100
以下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) {
if (year < 0 || month < 1 || month > 12) {
System.out.println("error");
return;
}
// 计算当月第一天的星期数,星期日为0,星期一为1,以此类推
int firstDayOfWeek = getFirstDayOfWeek(year, month);
// 计算当月的天数
int daysOfMonth = getDaysOfMonth(year, month);
// 打印日历表头
System.out.println("日\t一\t二\t三\t四\t五\t六");
// 打印日历表格
for (int i = 0; i < firstDayOfWeek; i++) {
System.out.print("\t");
}
for (int i = 1; i <= daysOfMonth; i++) {
System.out.print(i + "\t");
if ((i + firstDayOfWeek) % 7 == 0) {
System.out.println();
}
}
}
public static int getFirstDayOfWeek(int year, int month) {
int days = 0;
for (int i = 1900; i < year; i++) {
days += isLeapYear(i) ? 366 : 365;
}
for (int i = 1; i < month; i++) {
days += getDaysOfMonth(year, i);
}
return (days + 1) % 7;
}
public static int getDaysOfMonth(int year, int month) {
switch (month) {
case 2:
return isLeapYear(year) ? 29 : 28;
case 4:
case 6:
case 9:
case 11:
return 30;
default:
return 31;
}
}
public static boolean isLeapYear(int year) {
return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
}
}
```
运行程序后,输入年份和月份值,程序会输出对应月份的日历表。如果输入的值不合理,程序会输出error。例如,输入2020和1,则程序会输出2020年1月的日历表:
```
请输入年份值:2020
请输入月份值:1
日 一 二 三 四 五 六
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
```
阅读全文