java - 类中的 getter 和 setter?

标签 java class setter getter getter-setter

好吧,我已经把这门课大部分弄清楚了,但我似乎无法节省加仑来工作。我想要的是用它除以 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;
}


}

最佳答案

是的,你这里有一个概念问题。

您希望加仑Saved 是根据其他值计算得出的值。通常,这些值不是通过 getter 和 setter 访问的,而是通过计算(类行为)访问的。

您通常可以做两件事。第一个是为您的行为所依赖的所有值(在本例中为 distanceTraveled)提供 getter 和 setter。您可能还拥有其他字段的 getter 和 setter,但它们与我们当前讨论的行为无关。

然后,您编写一个方法,根据对象中当前存在的值运行所需的行为(无论它们是由构造函数还是 setter 输入)。

public double gallonsCalculated()
{
    return distanceTraveled/mpg;

}

您将没有 gallonsSaved 字段,因为它取决于其他字段,因此是多余的。当您需要它时,您可以调用该函数。

第二种方法,特别是在多次调用计算且其结果不太可能改变时使用,是执行一次计算,将其存储在私有(private)字段中,并在需要该值时返回该字段。

在这种情况下,您应该在使用 setter 时执行实际计算:

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

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

这样做是为了让 gallonsSaved 的内部值始终与当前的 distanceTravelled 相匹配。

如果 distanceTravelled 没有 setter ,并且仅从构造函数设置,则您可以在构造函数本身中进行计算,并且它永远不会改变。如果您这样做,您甚至可以将 gallonsSaved 声明为最终的。

您不断获得 0 的原因是您似乎选择了第二个选项 - 为计算结果保留一个隐藏变量 - 但您从未执行计算并将其存储在其中。

关于java - 类中的 getter 和 setter?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26577662/

相关文章:

java - 读取带有 unicode 字符的原始文件

java - 如何在tts说话时停止语音识别?

python - 如何避免python类方法中的无限递归

PHP PDO-MYSQL : How to use database connection across different classes

ios - 如何为iOS项目编写好的基类?

java - 我们应该在 Java Eclipse Dynamic Web 项目中的哪里存储数据库配置文件?

java - Java 可以通过用户输入进行 self 修改吗?

swift - 如何将计算属性的 'setter' 设置为私有(private)?

java - 从动态类引用动态 setter

分配相同的值时不调用 c# 属性 setter