gpt4 book ai didi

java - 类中的 getter 和 setter?

转载 作者:行者123 更新时间:2023-12-01 12:22:26 24 4
gpt4 key购买 nike

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com