Java:錯誤:變量可能尚未初始化我正在學習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];)。問題是,如果我聲明'i'并立即賦值(int i = 0;),代碼運行正常。但是如果我沒有分配值,如果在每個'if'之后分配了一個可能的值,我會得到錯誤EVEN。例如,我沒有用C得到這種錯誤。謝謝
3 回答

青春有我
TA貢獻1784條經驗 獲得超8個贊
Java不分析if
塊的邏輯,確定您的一個if
語句將運行并為其分配值i
。它很簡單,它看到沒有任何if
語句運行的可能性。在這種情況下,i
在使用之前不會賦值。
Java不會為局部變量賦予默認值,即使它為類變量和實例變量提供了默認值。 JLS的4.12.5節涵蓋了這一點:
程序中的每個變量在使用其值之前必須具有值:
和
局部變量(§14.4,§14.14)必須在使用之前通過初始化(第14.4節)或賦值(第15.26節)顯式賦值。
i
在聲明時,將某種默認值指定給滿足編譯器的值。
int i = 0; // Your if statements are here. return number[i];

qq_花開花謝_0
TA貢獻1835條經驗 獲得超7個贊
如果你想清理代碼,你可以很容易地做到這一點:
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];
即使你以前的代碼在邏輯上似乎沒問題,編譯器也不能總是與人類智能競爭。賦予它默認值將有助于滿足您的方法的安全性。

侃侃爾雅
TA貢獻1801條經驗 獲得超16個贊
在大多數情況下,我不建議使用默認分配,因為我發現它可以隱藏問題 - 即忘記處理某些邏輯。相反,我通常使用一個適當的else
地方,它更明確,更清楚意圖(例如,正確的解決方案也可能是提前返回或拋出異常)
添加回答
舉報
0/150
提交
取消