【问题标题】:Constructing my own classes?构建我自己的课程?
【发布时间】:2014-10-26 19:00:40
【问题描述】:

我在学习如何编写和使用自己的课程时遇到了麻烦。例如;

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。有什么想法吗?

【问题讨论】:

    标签: java eclipse class methods


    【解决方案1】:

    分配是从右到左。替换

    mode = this.mode;
    

    this.mode = mode
    

    BikeCommute 中的其他字段变量相同

    【讨论】:

      【解决方案2】:

      你有这些错误的方式:

      mode = this.mode;
      

      应该是:

      this.mode = mode;
      

      【讨论】:

        【解决方案3】:

        您的问题是关于这个特定课程中的一个特定问题;但是,您也应该考虑一般问题。

        如果您在构建或使用自己的类时遇到问题,可能是因为您将构建类与使用类混淆了。实际上,如果在“构建类”之前“使用类”,则可以获得更好的结果。我知道这听起来像是无稽之谈,但它是测试驱动开发背后的驱动理念,这是编写健壮可用程序的更有效方法之一。

        考虑研究 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());
        }
        

        干杯

        【讨论】:

          猜你喜欢
          • 2015-04-23
          • 1970-01-01
          • 2020-02-21
          • 2018-03-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-06-08
          • 1970-01-01
          相关资源
          最近更新 更多