Java 课堂上的能手和能手?
好吧,这门课我基本上都搞清楚了,但我似乎没办法让加伦去上班。我想要的是,它除以mpg行驶的距离,以得到如果你使用汽车,你会使用的汽油加仑数,但它只返回0.0。我很确定我的接球手和二传手都搞砸了,也不知道该怎么解决。为什么它只是返回一个0.0Java 课堂上的能手和能手?,java,class,setter,getter,getter-setter,Java,Class,Setter,Getter,Getter Setter,好吧,这门课我基本上都搞清楚了,但我似乎没办法让加伦去上班。我想要的是,它除以mpg行驶的距离,以得到如果你使用汽车,你会使用的汽油加仑数,但它只返回0.0。我很确定我的接球手和二传手都搞砸了,也不知道该怎么解决。为什么它只是返回一个0.0 public class BikeCommute { private String route; private double distanceTraveled; private int timeRequired; private String date
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;
}
}
gallonsCalculated
可能应该使用此.distance traveled
,而不是将distance traveled
作为参数。除非您试图在那里设置此.distance,否则您会忘记指定它。是的,您在这里遇到了一个概念问题
您希望加仑数保存为根据其他值计算的值。通常,这些值不是通过getter和setter访问的,而是通过计算(类行为)访问的
通常你可以做两件事。第一个是为您的行为所依赖的所有值设置getter和setter,在本例中是distance。您可能还有其他字段的getter和setter,但它们与我们当前讨论的行为无关
然后,编写一个方法,根据对象中当前存在的值运行所需的行为(不管它们是由构造函数还是由setter输入的)
您将没有gallonsaved
字段,因为它依赖于其他字段,因此是多余的。当您需要它时,您可以调用该函数
第二种方法,特别是在多次调用计算且其结果不太可能更改时使用,是执行一次计算,将其存储在私有字段中,并在需要值时返回该字段
在这种情况下,无论何时使用设置器,都应执行实际计算:
public void setDistanceTravelled( double distanceTravelled ) {
this.distanceTravelled = distanceTravelled;
this.gallonsSaved = distanceTravelled/mpg;
}
public double gallonsCalculated() {
return this.gallonsSaved;
}
这样做是为了使gallonsSaved
的内部值始终与当前distancetraveled
匹配
如果没有distance
的setter,并且它只是从构造函数中设置的,那么您可以在构造函数本身中进行计算,它将永远不会更改。如果这样做,您甚至可以声明gallonsSaved
final
您一直得到0的原因是您似乎选择了第二个选项—为计算结果保留一个隐藏变量—但您从未执行过计算并将其存储在其中。getter/setter在我看来很好。您的gallonsCalculated方法不应设置对象的gallonsaved,或者使用对象自身的距离和mpg。但这不应该导致它返回0.0。非常感谢!现在这是有道理的。
public void setDistanceTravelled( double distanceTravelled ) {
this.distanceTravelled = distanceTravelled;
this.gallonsSaved = distanceTravelled/mpg;
}
public double gallonsCalculated() {
return this.gallonsSaved;
}