2013-02-14 148 views
2

我創建了應該返回double類型和這裏的方法是我的代碼如何獲取返回類型double?

private void myMethod() 
{ 
    if(myArrayList.size() >= 2) 
    { 
     Double t = myArrayList.get(myArrayList.size()-1); 
     Double d = myArrayList.get(myArrayList.size()-2); 
     Double result = (t+ d )/2 ; 
     System.out.println("Average is: "+result); 
    } 
} 

更改無效翻番,只是之後的System.out .....線我添加返回結果,但是這給了一個錯誤!!你能告訴我如何改變這種方法,以便我獲得雙重返回類型嗎?

+0

可您發佈的方法是什麼? – Bhushan 2013-02-14 12:25:10

+0

嘗試在IF語句之外移動返回值 或從ELSE語句返回一些值 – Apurv 2013-02-14 12:25:20

+0

因此,此代碼的某些變體會觸發未公開的錯誤消息...太多的信息! – 2013-02-14 12:33:41

回答

0

總之事情了,以前所有的答案是正確的,但缺乏一些小的細節,如@ dinesh707說,你必須能夠回報每一個方法分支(除非發生異常)。並且還要確保在決定/ if塊之外聲明結果變量,並聲明該方法返回double,並且您應該使用double基元,而不是裝箱版本。

,使代碼看起來像:

private double myMethod() { 
double result=0; 
if(myArrayList.size() >= 2) { 
    double t = myArrayList.get(myArrayList.size()-1); 
    double d = myArrayList.get(myArrayList.size()-2); 
    result = (t+ d)/2 ; 
    System.out.println("Average is: "+result); 
} 
return result; 

}

+0

爲什麼建議使用double原語而不是Double對象? – 2013-02-14 12:38:12

+0

非常感謝,它的作品! – user2052015 2013-02-14 12:42:44

+0

@Arno Saxena很好,這幾乎是一個海峽前沿的事情,原始人比他們的盒子櫃檯部分要輕得多,而在java 1.5之前沒有自動拆箱,所以你永遠不能確定你的unoxing會永遠執行。 Josh Bloch在他的書「有效Java第二版」一書第49頁第221頁中這樣說。 – comanitza 2013-02-14 12:44:48

4

如果將方法的類型更改爲double,則每個分支都必須給出雙倍的返回值。因此,你的錯誤是因爲只有當「if」被輸入時,纔會有雙倍的回報,但如果不是的話!

private Double myMethod() 
{ 
    Double result = 0; // has to be initialised ... 
    if(myArrayList.size() >= 2) 
    { 
     Double t = myArrayList.get(myArrayList.size()-1); 
     Double d = myArrayList.get(myArrayList.size()-2); 
     result = (t+ d )/2 ; 
     System.out.println("Average is: "+result); 
    } 
    return result; 
} 

這應該工作

0

你缺少方法的返回類型。方法必須返回方法類型的值。如果方法被聲明爲void,那麼它意味着該方法不返回任何值。

private double myMethod() 
{ 
double result =0; 
if(myArrayList.size() >= 2) 
{ 
    double t = myArrayList.get(myArrayList.size()-1); 
    double d = myArrayList.get(myArrayList.size()-2); 
    result = (t+ d )/2 ; 
    System.out.println("Average is: "+result); 
} 
return result; 
} 
+2

'結果'在退貨時超出範圍。 – akaIDIOT 2013-02-14 12:28:07

+0

好,但一定要把結果聲明放在判定塊之外。 – comanitza 2013-02-14 12:28:59

1

我認爲你的rerun是在if條件之內。所以方法是擔心如果條件不成立會發生什麼。你也需要處理。

1
private double myMethod() 
{ 
    double result=0; 
    if(myArrayList.size() >= 2) 
    { 
     Double t = myArrayList.get(myArrayList.size()-1); 
     Double d = myArrayList.get(myArrayList.size()-2); 
     result = (t+ d )/2 ; 
     System.out.println("Average is: "+result); 
    } 
    return result; 
} 
+1

更好,但請確保相應地聲明返回類型。 – comanitza 2013-02-14 12:29:44

+0

@comanitza謝謝 – 2013-02-14 12:32:01

+0

非常感謝,它的工作原理! – user2052015 2013-02-14 12:46:30