Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 课堂上的能手和能手?_Java_Class_Setter_Getter_Getter Setter - Fatal编程技术网

Java 课堂上的能手和能手?

Java 课堂上的能手和能手?,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

好吧,这门课我基本上都搞清楚了,但我似乎没办法让加伦去上班。我想要的是,它除以mpg行驶的距离,以得到如果你使用汽车,你会使用的汽油加仑数,但它只返回0.0。我很确定我的接球手和二传手都搞砸了,也不知道该怎么解决。为什么它只是返回一个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;
}


}

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;
}