2013-04-25 74 views
0

下面的代碼有一個編譯器錯誤未初始化:價值if語句

speedMsg might not been initialized

我該如何解決呢?

String speedMsg; 

// Determine the grade 
if (speed >= 150) 
    speedMsg = "STOP! STOP! Please let me OUT!"; 
else if (speed <= 150) 
    speedMsg = "Whew I'll just walk from here Thanks."; 
+1

編譯器不知道你的if-elseif覆蓋整個域。因此,警告說,除非您指定初始值或'else'塊,否則您返回的值可能爲空。 – Alfabravo 2013-04-25 14:23:50

回答

6

更改爲:

// Determine the grade 
if (speed >= 150) 
    speedMsg = "STOP! STOP! Please let me OUT!"; 
else 
    speedMsg = "Whew I'll just walk from here Thanks."; 

這應該足以讓編譯器可以肯定的變量將被初始化。

+0

+1。就目前而言,else if意味着這兩個條件都可能被命中,所以變量可能未初始化。由於很明顯,必須擊中一個條件或其他條件,因此在代碼中使這一點很明顯沒有問題。 – 2013-04-25 14:51:12

+0

這個解決方案非常有幫助,我對這個網站很滿意,因爲我的導師不擅長解釋這個。非常感謝 – 2013-04-25 21:23:08

1

else if替換爲else,因爲編譯器會知道speedMsg將始終有一個值。

0

請初始化speedMsg:

String speedMsg = null; 

這應該解決這個問題,speedMsg可能不會被初始化

+1

這將消除錯誤,但它不是最好的解決方案。 – 2013-04-25 14:34:44

+0

注意到@DuncanJones並感謝您不要投降。衝動迴應。 ;) – Jops 2013-04-25 14:36:14

0

你必須包括一個else聲明,因爲編譯器是不是足夠聰明弄清楚,已包含在ifif else聲明speed值的一切準備。

請注意,局部變量是唯一沒有默認值的變量,您需要初始化它們。

1

集:

String speedMsg = ""; 

或刪除否則如果,將其更改爲別的。

if (speed >= 150) 
    speedMsg = "STOP! STOP! Please let me OUT!"; 
else 
    speedMsg = "Whew I'll just walk from here Thanks."; 

更妙的是:

String speedMsg = speed >= 150 ? 
        "STOP! STOP! Please let me OUT!" : 
        "Whew I'll just walk from here Thanks."; 

你不是你的初始化字符串,然後試圖返回它。

0

如果 speed >= 150speed <= 150speedMsg可能不被初始化。

雖然很明顯速度的所有可能值都存在,但Java 無法知道它。 如果您只使用if else而不是if else if,它將被初始化。

或者您聲明時需要初始化爲默認錯誤消息。

0

error variable speedMsg might not been initialized

此錯誤messege告訴你,這個變量(這裏:speedMsg)可能是。所以,如果你設置了默認值得這樣就可以解決問題:

String speedMsg = "Speed"; 

或者你解決它像這樣

if (speed >= 150) 
    speedMsg = "STOP! STOP! Please let me OUT!"; 
else 
    speedMsg = "Whew I'll just walk from here Thanks."; 

爲什麼你得到消息的原因,Eclipse是不能檢查「if-else if」塊中的比較是否有效,speedMsg將始終設置(無默認值)。

恕我直言,第二種解決方案更優雅。