用java实现:在命令行输入年份和月份,打印输出月历
时间: 2024-05-14 14:15:10 浏览: 82
用汇编语言实现输入年份和月份,打印出该月的日历表
4星 · 用户满意度95%
以下是一个简单的Java程序,实现在命令行输入年份和月份,打印输出月历:
```java
import java.util.Scanner;
public class Calendar {
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();
// 计算该月份的天数
int days = getDaysInMonth(year, month);
// 计算该月份第一天是星期几
int firstDayOfWeek = getFirstDayOfWeek(year, month);
// 打印月历头部
System.out.println(" Su Mo Tu We Th Fr Sa");
// 打印月历内容
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(" ");
} else if (day > days) {
break;
} else {
System.out.printf("%3d", day);
day++;
}
}
System.out.println();
if (day > days) {
break;
}
}
}
// 计算该月份的天数
public static int getDaysInMonth(int year, int month) {
int[] daysInMonth = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
if (month == 2 && isLeapYear(year)) {
return 29;
} else {
return daysInMonth[month - 1];
}
}
// 判断是否是闰年
public static boolean isLeapYear(int year) {
return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
}
// 计算该月份第一天是星期几
public static int getFirstDayOfWeek(int year, int month) {
int[] daysInMonth = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int totalDays = 0;
for (int i = 1900; i < year; i++) {
if (isLeapYear(i)) {
totalDays += 366;
} else {
totalDays += 365;
}
}
for (int i = 1; i < month; i++) {
if (i == 2 && isLeapYear(year)) {
totalDays += 29;
} else {
totalDays += daysInMonth[i - 1];
}
}
return (totalDays + 1) % 7;
}
}
```
该程序通过调用 `Scanner` 类的 `nextInt()` 方法获取用户输入的年份和月份,然后调用三个自定义的静态方法计算该月份的天数、判断是否是闰年以及该月份第一天是星期几,并利用一个嵌套的循环打印出月历的内容。其中,月历头部的 `Su Mo Tu We Th Fr Sa` 是指星期天到星期六的英文缩写,用于方便阅读月历。
阅读全文