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