【发布时间】:2014-06-10 23:15:59
【问题描述】:
我正在学习 Java,但遇到此错误。我知道这已被问过几次(很多次),但似乎没有一个答案能回答我的问题。代码主体为:
String[] number = {"too small", "one", "two", "three", "four", "too large"};
int i;
if(num<1){
i=0;
}
if(num==1){
i=1;
}
if(num==2){
i=2;
}
if(num==3){
i=3;
}
if(num==4){
i=4;
}
if(num>4){
i=5;
}
return number[i];
变量 'num' 是在前面声明、初始化和给出的。 我得到的错误是:“变量 'i' 可能没有被初始化”并指向最后一行(返回 number[i];)。
问题是,如果我声明 'i' 并立即分配一个值 (int i=0;),则代码运行良好。但是,如果我没有分配一个值,即使在每个“if”之后分配了一个可能的值,我也会得到错误。
例如,我不会在 C 语言中遇到这种错误。
谢谢
【问题讨论】:
-
编译器告诉你它希望你赋值;显然,当您这样做时,它将起作用。你为什么不想这样做?
-
rgettman 很好地解释了这一点。我首选的解决方法是 (1) 在所有分支上使用
else,并且 (2) 将最后一个设置为else而没有另一个if,即else { ...而不是else if (num > 4) { ...。我认为这让读者更清楚,也避免了“明确的分配”问题。在这种特殊情况下,我只写int i = (num < 1) ? 0 : (num > 4) ? 5 : num;。 -
@ajb 三元分生孢子在这里似乎太复杂了。我只是一个
else:| -
@JeroenVannevel 它确实有效,但我想知道为什么它在其他方面无效。
-
This chapter of the jls 定义了明确分配的规则。
标签: java