Java:错误:variables可能没有被初始化

我正在学习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]; 

variables'num'被声明,初始化并在之前给出。 我得到的错误是:“variables”我可能没有被初始化“,并指向最后一行(返回数字[我];)。

事情是,如果我声明“我”,并立即分配一个值(诠释我= 0;)代码运行良好。 但是,如果我不分配一个值,如果在每个“if”之后都指定了一个可能的值,我会得到错误。

例如,我不会遇到这种C错误。

谢谢

Java不分析你的逻辑if块决定你的一个if语句将运行并给i赋值。 这很简单,它看到没有任何if语句运行的可能性。 在这种情况下,在使用之前,没有给i分配任何值。

即使给类variables和实例variables赋予默认值,Java也不会将默认值赋予局部variables。 JLS的4.12.5节涵盖了这一点:

程序中的每个variables在使用其值之前都必须有一个值:

局部variables(§14.4,§14.14)必须在使用前通过初始化(§14.4)或赋值(§15.26)

为了满足编译器的需要,在声明它的时候为i指定一些默认值。

 int i = 0; // Your if statements are here. return number[i]; 

如果你想清理代码,你可以很容易地做到这一点:

 String[] number = {"too small", "one", "two", "three", "four", "too large"}; int i = num; if (i < 1) { i = 0; } if (i > 4) { i = 5; } return number[i]; 

或者,如果num的值甚至不重要:

 String[] number = {"too small", "one", "two", "three", "four", "too large"}; if (num < 1) { num = 0; } if (num > 4) { num = 5; } return number[num]; 

即使你以前的代码在逻辑上看起来没问题,编译器也不能总是与人类智能竞争。 给它默认值将有助于满足您的方法的安全性。