2014-10-26 86 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;