4 回答

TA貢獻(xiàn)883條經(jīng)驗(yàn) 獲得超454個(gè)贊
關(guān)鍵不在 b 沒有初值!
就像你在前面回答中的疑問“我的if結(jié)構(gòu)不能將b初始化嗎?我在if對(duì)b進(jìn)行了賦值了,為什么不可以呢?”
你想得沒錯(cuò)。變量 b 在定義時(shí)沒有初始化,但后面 if 結(jié)構(gòu)將 b 初始化了的話是沒問題的!
但問題的關(guān)鍵是:你這個(gè) if 結(jié)構(gòu)過于復(fù)雜,編譯器無法判斷出是否存在所有分支都跳過的可能性,所以它認(rèn)為存在 b 未初始化的風(fēng)險(xiǎn)而報(bào)錯(cuò)。
如果你把最后一個(gè)分支加上 else 語句(同時(shí)也在其中賦予 b 適合的值),編譯器可能就不會(huì)報(bào)錯(cuò)了。因?yàn)楹苋菀拙湍芡茢喑?if else 這樣的結(jié)構(gòu)中至少有一個(gè)分支會(huì)被執(zhí)行。
當(dāng)然這原因很可能是編譯器相關(guān)的。不過在可能的情況下,明確給予每個(gè)變量合適的初值確實(shí)是個(gè)好習(xí)慣。

TA貢獻(xiàn)3593條經(jīng)驗(yàn) 獲得超1個(gè)贊

TA貢獻(xiàn)8條經(jīng)驗(yàn) 獲得超8個(gè)贊
我建議你把方法改一下
public?double?price(double?a)?{ ????if?(a?>=?200)?{ ????????return?0.85?*?a; ????}?else?if(a?>=?100)?{ ????????return?0.95?*?a; ????}?else?{ ????????return?a; ????} }
有確定的返回值時(shí)最好直接返回

TA貢獻(xiàn)1條經(jīng)驗(yàn) 獲得超0個(gè)贊
Java規(guī)定: 作為返回值的變量需要進(jìn)行初始化. 你需要類似這樣的初始化: double b = 0;
添加回答
舉報(bào)