2013-05-27 55 views

回答

2

在if塊的內部使用變量之前,需要對它進行初始化。

試試這個:

double albedo=0; 

相反的:

double albedo; 

但是要記住,你的變量將保持0,如果您還沒有指定一個else塊你的條件返回false。

+0

謝謝,這工作完美! – ninopino1

+1

這會導致編譯錯誤消失,但會造成誤導,並不能真正解決原始邏輯問題。沒有必要在聲明點初始化一個Java變量。在嘗試使用該值之前,有必要分配一個值。這裏有兩個代碼路徑,一個訪問if塊的內部,另一個不訪問。如果if條件爲真,則分配一個值,否則不分配。 「否則不是」導致編譯錯誤。順便說一句,if條件在這裏永遠不會是真的,因爲沒有數字既不低於-50也不高於+50。 –

0

局部變量應該值初​​始化使用它.Something這樣前:

double albedo = 0.0; 

編譯器會抱怨,因爲局部變量沒有分配任何默認值。因此,在運行時如果if()條件失敗,那麼變量將不會被賦值,在這種情況下,運行時應該返回給函數的調用者什麼值?因此用一些默認值初始化它。

+0

只是閱讀這個答案,它解釋了爲什麼錯誤是完美的,非常感謝你的明確解釋,我不敢相信我沒有想到這一點! – ninopino1

2

如果if子句中的條件不成立,則該變量未被分配。在這種情況下,後面的返回引用一個未初始化的變量。

+0

不知道爲什麼這得到了downvoted。 – Patashu

1

這是一個私有方法,局部變量不會得到默認值,它們必須被初始化。 考慮一個情況,如果塊沒有進入控制,那麼你的變量不包含任何值,因此錯誤。

相關問題