2014-10-26 156 views
0

好吧,所以我主要想到這個課程,但我似乎無法讓加侖保存起作用。我想要的是,爲了得到如果你使用汽車時使用過的加侖汽油,它將劃分的距離除以mpg,但它只返回0.0。我很確定我的getter和setter搞砸了,而不確定如何解決它。爲什麼它只是返回一個0.0?課堂上的吸氣和吸入器?

public class BikeCommute 
{ 

private String route; 
private double distanceTraveled; 
private int timeRequired; 
private String dateTraveled; 
private String mode; 
private double gallonsSaved; 
final private double mpg = 20.8; 


public BikeCommute(String mode, String dateTraveled, String route, 
     double distanceTraveled, int timeRequired) 
{ 
    this.mode = mode; 
    this.route = route; 
    this.distanceTraveled = distanceTraveled; 
    this.timeRequired = timeRequired; 
    this.dateTraveled = dateTraveled; 
} 

public double gallonsCalculated(double distanceTraveled, double mpg) 
{ 
    gallonsSaved = distanceTraveled/mpg; 
    return gallonsSaved; 

} 

public double getGallonsSaved() 
{ 
    return this.gallonsSaved; 
} 

public void setGallonsSaved(double gallonsSaved) 
{ 
    this.gallonsSaved = gallonsSaved; 
} 

public double getMpg() { 
    return mpg; 
} 

public String toString() 
{ 

    return mode + " " + route + ", " + distanceTraveled + " miles, " + timeRequired + " hrs, " + 
      dateTraveled + ". Gallons saved from switching from car: " + gallonsSaved; 
} 


} 
+0

Getters/setters對我來說很好。 – Drux 2014-10-26 20:48:14

+0

您的gallonsCalculated方法不應該設置對象的加侖保存,或者使用對象自己的distanceTraveled和mpg。這應該不會導致它返回0.0。 – Martin 2014-10-26 20:50:46

回答

1

是的,你在這裏有一個概念上的問題。

您希望gallonsSaved爲從其他值計算出的值。通常,這些值不是通過getter和setter來訪問,而是通過計算(類行爲)。

通常有兩件事你可以做。首先是讓getter和setter對所有你的行爲所依賴的值 - distanceTraveled,在這種情況下。你可能也有其他領域的getter和setter,但它們與我們目前正在討論的行爲無關。

然後,您編寫一個方法,根據對象中當前存在的值(無論它們是由構造函數還是由setter輸入)來運行所需的行爲。

public double gallonsCalculated() 
{ 
    return distanceTraveled/mpg; 

} 

您將沒有gallonsSaved字段,因爲它取決於其他字段,因此是多餘的。當你需要它時,你可以調用這個函數。

第二種方法,特別是在多次調用計算並且其結果不太可能改變時使用的第二種方法是進行一次計算,將其存儲在專用字段中,並在需要該值時返回該字段。

在這種情況下,你只要使用你的制定者應執行實際的計算:

public void setDistanceTravelled(double distanceTravelled) { 
    this.distanceTravelled = distanceTravelled; 
    this.gallonsSaved = distanceTravelled/mpg; 
} 

public double gallonsCalculated() { 
    return this.gallonsSaved; 
} 

是這樣的做,這樣的gallonsSaved內在價值總是當前distanceTravelled匹配。

如果distanceTravelled沒有設置方法,並且只能從構造函數中設置,那麼可以在構造函數中進行計算,它將永遠不會改變。如果你這樣做,你甚至可以宣佈gallonsSaved final。

您一直得到0的原因是您似乎已經選擇了第二個選項 - 爲計算結果保留一個隱藏變量 - 但您從未執行過計算並將其存儲在其中。

+0

非常感謝!這是有道理的。 – 2014-10-26 21:23:07

0

gallonsCalculated也許應該使用this.distanceTraveled,而不是採取distanceTraveled作爲參數。除非你想在那裏設置this.distanceTraveled,在這種情況下,你忘記了分配給它。