编写一个java代码,输入年份和月份值,生成并输出该月的日历。如 果输入的值不合理,则输出 例如,输入2020和1,则生成2020年1月的日历
时间: 2023-06-11 07:08:16 浏览: 115
以下是一个简单的Java程序,根据输入的年份和月份值生成并输出该月的日历。如果输入的值不合理,则输出错误信息。
```java
import java.util.Scanner;
public class CalendarGenerator {
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();
// 判断输入是否合法
if (year < 0 || month < 1 || month > 12) {
System.out.println("输入的年份或月份不合法!");
return;
}
// 获取该月的天数
int days = getDaysOfMonth(year, month);
// 获取该月的第一天是星期几
int firstDayOfWeek = getFirstDayOfWeek(year, month);
// 输出日历
System.out.printf("%d年%d月\n", year, month);
System.out.println("日\t一\t二\t三\t四\t五\t六");
int day = 1;
for (int i = 0; i < 6; i++) {
for (int j = 0; j < 7; j++) {
if (i == 0 && j < firstDayOfWeek) {
System.out.print("\t");
} else if (day > days) {
System.out.println();
return;
} else {
System.out.printf("%d\t", day);
day++;
}
}
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 boolean isLeapYear(int year) {
return (year % 4 == 0 && year % 100 != 0) || year % 400 == 0;
}
/**
* 获取指定年份和月份的第一天是星期几(0表示星期日)
*/
private static int getFirstDayOfWeek(int year, int month) {
int y = year;
int m = month;
if (m == 1 || m == 2) {
m += 12;
y--;
}
int k = y % 100;
int j = y / 100;
int h = (1 + 26 * (m + 1) / 10 + k + k / 4 + j / 4 + 5 * j) % 7;
return (h + 6) % 7;
}
}
```
这个程序首先通过 `Scanner` 获取用户输入的年份和月份值,然后判断输入是否合法。如果输入不合法,输出错误信息并退出程序。如果输入合法,则调用 `getDaysOfMonth` 和 `getFirstDayOfWeek` 方法分别获取该月的天数和第一天是星期几。最后通过双重循环输出日历。在输出时,我们需要特别注意第一行的星期几标识,以及月份可能跨越多行的情况。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![txt](https://img-home.csdnimg.cn/images/20210720083642.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)