2014-10-26 85 views
0

我在學習如何編寫和使用自己的類時遇到了麻煩。例如;構建我自己的類?

import java.text.NumberFormat; 

public class BikeCommute { 

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


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

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

} 

public double getGallons(){ 
    return gallonsSaved; 
} 

public String toString(){ 

    return mode + route + distanceTraveled + timeRequired + dateTraveled + gallonsSaved; 
} 
} 

我想編寫一個名爲BikeCommute類,將在路由讀,運輸方式,行駛距離,所需的時間和日期,此行是旅行,計算有多少氣體加侖獲救通過將行駛距離除以每加侖英里數,並輸出路線,模式,行駛距離,所需時間,行駛日期和加侖節省。但是,當我運行它時,會返回nullnull0.0null0.0。有什麼想法嗎?

回答

0

你的問題是關於這個特定類中的一個特定問題;然而,你也應該考慮一般問題。

如果您在構建或使用自己的類時遇到問題,可能是因爲您已經將類的構建與類的使用混淆了。其實,如果你在「建造課堂」之前「使用課堂」,你可以得到更好的結果。我知道這聽起來像是無稽之談,但它是測試驅動開發背後的驅動理念,這是編寫強大可用程序的更有效方法之一。

考慮查看JUnit並學習如何設置「測試」目錄。我也建議你最低限度地學習「足夠」的maven來自動化這個。不要試圖成爲一名JUnit或Maven的演奏家。在這個區域開始剪切和粘貼是很好的。

這時你可以先寫你的測試:

public void testBikeCommute() { 
    BikeCommute commute = new BikeCommute(...); 
    Assert.assertEquals(5, commute.getGallons()); 
} 

現在你可以看到你的設計是非常奇怪的,因爲大多數我的通勤不具備加侖。當您在編寫軟件之前試圖「使用」您的軟件時,您可能會發現您的「通勤」實際上是兩種理論通勤之間的比較,一種是在汽車中,另一種是在自行車上。

public void testCommuteSavings() { 
    BikeCommute bike = new BikeCommute(...); 
    CarCommute car = new CarCommute(...); 
    SavingsCalculator calculator = new Calculator(car, bike); 
    Assert.assertEquals(5, calcuator.getSavedGallons()); 
} 

這種「先用」技術可以讓你發展你的問題更清潔的代表,並與像JUnit的工具包,甚至可以成爲一個自動化的測試策略。此外,它使得一些項目很容易測試,像

public void testBikeCommuteUsesZeroGallons() { 
    BikeCommute bike = new BikeCommute(); 
    Assert.assertEquals(0, bike.getGallonsUsed()); 
} 

乾杯

2

作業是從右到左。與

this.mode = mode 

同其它場變量BikeCommute

1

更換

mode = this.mode; 

你有這些周圍的錯誤的方式:

mode = this.mode; 

應該是:

this.mode = mode;