我必须实现具有以下属性的类Car。汽车具有一定的燃料效率(以英里/加仑或升/公里 - 一次测量)和燃气罐中的一定量的燃料。效率在构造器中指定,并且初始燃料水平为0.提供模拟驾驶汽车一定距离的方法驱动器,减少燃料箱中的汽油量。还提供方法getGasInTank,返回燃油箱中当前的汽油量,并添加汽油,将汽油添加到油箱。
我已经为汽车创建了一个类和一个测试程序来插入一些值,当我运行程序时,我得到的是我输入的addGas值。每加仑英里的计算将不会运行我不懂为什么。你可以告诉我,我对java非常陌生,对此问题的任何帮助都非常感激。
public class CarTest
{
public static void main(String[] args)
{
Car richCar = new Car(49);
richCar.addGas(15);
richCar.drive(150);
System.out.println(richCar.getGas());
}
}
/**
A car can drive and consume fuel
*/
public class Car
{
/**
Constructs a car with a given fuel efficiency
@param anEfficiency the fuel efficiency of the car
*/
public Car(double mpg)
{
milesPerGallon = mpg;
gas = 0;
drive = 0;
}
/** Adds gas to the tank.
@param amount the amount of fuel added
*/
public void addGas(double amount)
{
gas = gas + amount;
}
/**
Drives a certain amount, consuming gas
@param distance the distance driven
*/
public void drive(double distance)
{
drive = drive + distance;
}
/**
Gets the amount of gas left in the tank.
@return the amount of gas
*/
public double getGas()
{
double mpg;
double distance;
distance = drive;
mpg = gas * milesPerGallon / distance;
return gas;
}
private double drive;
private double gas;
private double milesPerGallon;
}
答案 0 :(得分:0)
计算就好了。不过,你的方法只是返回气体的一个值。
这可以用一些清理;我建议摆脱所有的挫折,然后重新计算。
public double calculateGas() {
return (gas * milesPerGallon) / drive;
}
答案 1 :(得分:0)
您的测试程序只调用三种方法:
richCar.addGas(15);
richCar.drive(150);
System.out.println(richCar.getGas());
让我们来看看每个人做了什么。
addGas(15)
修改您的气体实例变量。
drive(150)
仅执行第drive = drive + distance;
行
getGas()
似乎做了一些事情,超出预期(人们会期望它只返回gas
,但它也会计算并存储最新的mpg值)。但是如果你检查getGas()
气体的代码从未被修改过,那么只返回。
所以你调用了三种方法,在这三种方法中,当你用richCar.addGas(15)
将气体设置为15时,气体只被修改一次。
如果drive(int)
方法基于某个设定的mpg值修改gas
,而不是仅跟踪驱动的英里数,那么看起来最简单,然后你就可以{{1}只需返回drive()
。
这意味着您也可以摆脱gas
中mpg
的修改,这很好,因为无论计算使用多少气体,都需要该值。如果你有更多的逻辑改变了使用了多少气体但你还没有使用它,你可能会引入一个getGas()
值。
答案 2 :(得分:0)
结合一些想法......
/**
Drives a certain amount, consuming gas
@param distance the distance driven
*/
public void drive(double distance)
{
drive = drive + distance;
gas = gas - (distance / milesPerGallon);
}
/**
Gets the amount of gas left in the tank.
@return the amount of gas
*/
public double getGas()
{
return gas;
}
答案 3 :(得分:-1)
看起来你的问题就在这里
public double getGas()
{
double mpg;
double distance;
distance = drive;
mpg = gas * milesPerGallon / distance;
return gas;
}
你正在对mpg进行计算,但是你最后会返回gas属性。
除了第一次添加气体之外,它实际上似乎并没有改变气体的值。