大家好,这是我的第一篇文章,如果有任何错误,请原谅我。 这是我的问题:
public class Main {
public static void main(String[] args) {
int onlineplayer = 0;
int maxplayer;
switch(onlineplayer) {
case 0:
maxplayer = 1;
break;
case 1:
maxplayer = 2;
break;
}
System.out.print(onlineplayer + "/" + maxplayer);
}
这行代码返回此错误:
Main.java:13: error: variable maxplayer might not have been initialized
System.out.print(onlineplayer + "/" + maxplayer);
^
同时
public class Main {
public static void main(String[] args) {
int onlineplayer = 0;
int maxplayer;
switch(onlineplayer) {
case 0:
maxplayer = 1;
System.out.print(onlineplayer + "/" + maxplayer);
break;
case 1:
maxplayer = 2;
System.out.print(onlineplayer + "/" + maxplayer);
break;
}
}
这个有效。 我之前说过学习Java,我认为它们都是同一件事。有人可以向我解释一下有什么区别以及为什么第一个不起作用吗?
最佳答案
代码可能看起来相似,但区别如下:
在第二个示例中,在设置 maxplayer
之后直接调用 print
函数,因此在读取变量时,保证会设置它。
但是在第一个示例中,不能保证开关进入任何情况,因此当到达 print
行时,maxplayer
可能仍然未初始化。
为了防止这种情况,您通常会添加一个 default
案例,如果没有其他案例匹配,就会执行该案例。这样就可以保证 maxplayer
已设置:
switch(onlineplayer) {
case 0:
maxplayer = 1;
break;
case 1:
maxplayer = 2;
break;
default:
System.out.print("Some warning");
maxplayer = 1; // some default value
}
请记住,您的 switch 中应该始终有一个 default
case!请参阅以下很好的解释,了解为什么 default
情况很重要:https://stackoverflow.com/a/5241196/1174343
关于简化代码时Java切换错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32023926/