亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Java:錯誤:變量可能尚未初始化

Java:錯誤:變量可能尚未初始化

Helenr 2019-08-28 15:51:10
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];


查看完整回答
反對 回復 2019-08-28
?
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];

即使你以前的代碼在邏輯上似乎沒問題,編譯器也不能總是與人類智能競爭。賦予它默認值將有助于滿足您的方法的安全性。


查看完整回答
反對 回復 2019-08-28
?
侃侃爾雅

TA貢獻1801條經驗 獲得超16個贊

在大多數情況下,我不建議使用默認分配,因為我發現它可以隱藏問題 - 即忘記處理某些邏輯。相反,我通常使用一個適當的else地方,它更明確,更清楚意圖(例如,正確的解決方案也可能是提前返回或拋出異常)

查看完整回答
反對 回復 2019-08-28
  • 3 回答
  • 0 關注
  • 2735 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號