使用switch…case语句,将12个月按照“X月有30天”,“X月有31天”和“本月是二月”,分别显示。利用java
时间: 2025-03-14 10:12:41 浏览: 25
### Java 中使用 `switch` 和 `case` 判断每月天数
以下是通过 Java 的 `switch...case` 结构实现的一个示例程序,用于判断给定年份和月份对应的天数:
```java
import java.time.Year;
import java.util.Scanner;
public class MonthDaysCalculator {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入年份:");
int inputYear = scanner.nextInt();
Year year = Year.of(inputYear);
System.out.print("请输入月份(1-12):");
int inputMonth = scanner.nextInt();
int daysInMonth = calculateDaysInMonth(year, inputMonth);
if (daysInMonth != -1) {
System.out.printf("%d 年 %d 月有 %d 天%n", inputYear, inputMonth, daysInMonth);
} else {
System.out.println("输入的月份不合法!");
}
scanner.close();
}
private static int calculateDaysInMonth(Year year, int month) {
if (month < 1 || month > 12) {
return -1; // 非法月份
}
int days = switch (month) {
case 4, 6, 9, 11 -> 30;
case 2 -> year.isLeap() ? 29 : 28;
default -> 31;
};
return days;
}
}
```
#### 解析代码逻辑
上述代码实现了基于用户输入的年份和月份计算对应天数的功能。具体解析如下:
- 使用了 `Scanner` 类获取用户的输入数据[^1]。
- 定义了一个方法 `calculateDaysInMonth` 来封装核心逻辑,其中利用了 `switch` 表达式的特性来简化条件分支处理。
- 对于特殊月份 February (即 2),调用了 `Year.isLeap()` 方法判断当前年份是否为闰年,并据此决定其天数为 28 或者 29。
如果采用传统方式而非现代 `switch` 表达式,则可以这样写:
```java
private static int calculateDaysInMonthTraditional(int yearValue, int month) {
if (month < 1 || month > 12) {
return -1; // 非法月份
}
boolean isLeapYear = Year.of(yearValue).isLeap();
int days;
switch (month) {
case 4:
case 6:
case 9:
case 11:
days = 30;
break;
case 2:
days = isLeapYear ? 29 : 28;
break;
default:
days = 31;
break;
}
return days;
}
```
这里展示了另一种形式的传统 `switch-case` 构造,在某些旧版本 JDK 不支持新语法的情况下仍然适用[^2]。
#### 输出样例
假设运行以上任一版本代码并按提示操作:
- 用户依次键入 “2024” 及 “2”,则终端显示:“2024 年 2 月有 29 天”
- 若分别录入 “2023” 跟 “4”,那么会得到结果:“2023 年 4 月有 30 天”
阅读全文
相关推荐


















