gpt4 book ai didi

java - 双局部变量打印为 0.0 而不是设置值

转载 作者:行者123 更新时间:2023-11-30 06:35:35 25 4
gpt4 key购买 nike

我在打印变量 priceUsed 时遇到问题在方法 getPriceAfterUse() 为我获取值后,方法 OutputDetails 应该打印所有信息。但是变量 priceUsed 打印为 0.0。我不知道为什么。

这是我的代码:

    import java.util.Scanner;
class Car
{
public String brandName;
public String color;
public double priceNew, priceUsed;
public double odometer;

public double getPriceAfterUse()
{
priceUsed = priceNew*(1-(odometer/6000000));
return priceUsed;

}

public double updateMilage()
{
Scanner keyboard = new Scanner(System.in);
odometer = keyboard.nextDouble();
return odometer;

}
public void outputDetails()
{
System.out.println("The car brand name is : " + brandName);
System.out.println("The car new price: " + priceNew);
System.out.println("The car used price: " + priceUsed);
System.out.println("The car color: " + color);
System.out.println("The car Odemeter: " + odometer );
}


}

public class CarTest{

public static void main(String args[])
{
Scanner keyboard = new Scanner (System.in);

Car a = new Car();
System.out.println("Enter you car Brand Name: ");
a.brandName = keyboard.next();
System.out.println("Enter your car color: ");
a.color = keyboard.next();
System.out.println("Enter your new price: ");
a.priceNew = keyboard.nextDouble();
System.out.println("Enter your Odometer:");
a.updateMilage();
System.out.println();
a.outputDetails();
System.out.println();


}
}

最佳答案

public double getPriceAfterUse()
{
priceUsed = priceNew*(1-(odometer/6000000));
return priceUsed;
}

只有这个方法设置了 priceUsed 的值,并且在 outputDetails() 之后才会调用它,所以这就是你没有得到正确结果的原因.

但是,这里有一个更重要的问题:根据经验,称为 getSomething() 的方法除了返回一个值外不应该做任何事情。它们当然不能有任何从外部可见的副作用。

更一般地说,方法的名称应该尽可能准确地描述它们的作用。误导性的方法名称可能会给您带来很多痛苦。

您应该注意的另一件事是尽量使您的对象保持一致状态。正如您所注意到的,priceUsed 不会在 mileage 更新时自动更新,即使它是 mileage 的函数。它也是 priceNew 的函数,也可以单独设置,因此除非您以正确的顺序调用每个方法,否则您将获得不一致的状态。解决这个问题的方法是使用一个操作来一次更新所有这些操作:

public void updateValue( double priceNew, double odometer ) {
this.priceNew = priceNew;
this.odometer = odometer;
this.priceUsed = priceNew * (1.0d - ( odometer / 6000000.0d ) );
}

关于java - 双局部变量打印为 0.0 而不是设置值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5928229/

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