gpt4 book ai didi

java - 为什么在 if 语句中初始化字符串似乎与在 switch 语句中不同?

转载 作者:IT老高 更新时间:2023-10-28 21:17:28 25 4
gpt4 key购买 nike

我正在学习 Java,我正在根据一些书籍示例编写简单的程序来查找一个月所在的季节。这两个类演示了两种测试值的方法:if/else if 语句和 switch 语句。我感到困惑的是用于保持季节的字符串。当我将它声明为 String season; 它适用于 if 语句。但是使用 switch 语句,这样做会产生“局部变量 season 可能尚未初始化”错误。

public class IfElse {
public static void main(String args[]) {
int month = 5;
String season;
// isn't initialized, works fine

if(month == 12 || month == 1 || month == 2)
season = "Winter";
else if(month == 3 || month == 4 || month == 5)
season = "Spring";
else if(month == 6 || month == 7 || month == 8)
season = "Summer";
else
season = "Fall";

// this is okay
System.out.println("May is a " + season + " month.");
}
}

在声明的同时不初始化季节对于上面的代码可以正常工作,但是如果以相同的方式声明,开关的最后一个 println() 中的季节变量会产生错误。

以下代码不起作用:

public class Switch {
public static void main(String args[]) {
int month = 5;
String season;
// HAS to be initialized, currently causes error
switch(month) {
case(12):
case(1):
case(2):
season = "Winter";
break;
case(3):
case(4):
case(5):
season = "Spring";
break;
case(6):
case(7):
case(8):
season = "Summer";
break;
case(9):
case(10):
case(11):
season = "Fall";
break;

default:
System.out.println("Invalid month");
break;
}
System.out.println("May is a " + season + " month");
} // produces an error if season isn't initialized to null or ""
}

这是什么原因造成的?是包围 switch 语句的大括号,还是 switch 语句本身的问题?在 if 语句中初始化字符串与在 switch 语句中初始化字符串有何不同?我似乎无法理解这一点。

对不起,如果这是非常明显的问题,或者这似乎是一个愚蠢的问题。

最佳答案

那是因为您没有指定默认情况下必须是什么季节。当月份不在 1-12 之间时会发生什么? season 不会被初始化。

如果您只期望 1-12 作为月份输入,那么您可能需要考虑在 default:

中抛出 Exception
default:
throw new IllegalArgumentException("Invalid month");

关于java - 为什么在 if 语句中初始化字符串似乎与在 switch 语句中不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54032729/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com