【发布时间】:2021-09-06 21:49:37
【问题描述】:
这是作业:
实现一个类 Car。一个 Car 对象应该有三个(私有)实例变量,一个用于燃油效率(代表每加仑英里数),一个用于燃油水平(代表加仑),以及一个用作里程表的变量(代表英里数)。汽车的燃油效率应在 Car 构造函数中指定为参数,并且构造函数应将燃油油位和里程表设置为零。还应该有第二个 Car 构造函数,它具有初始化燃油效率和燃油水平的两个参数(并且构造函数应该将里程表设置为零)。应该有 getFuelEfficiency()、getOdometer() 和 getFuelLevel() 方法。应该有一个方法 addFuel(double gallons) 将指定量添加到燃料水平,然后返回对当前 Car 对象的引用。应该有一个方法 drive(double miles) 来模拟驾驶汽车指定的距离。 drive() 方法应该通过使用的燃料量来调整燃料水平,通过行驶的英里数来调整里程表,并且它应该返回行驶的英里数,如果有,则可能小于指定的英里数没有足够的燃料。请注意,没有 setFuelEfficiency()、setOdometer() 和 setFuelLevel() 方法。燃油效率领域是不可变的;一旦由构造函数设置,就无法更改。里程表的值只能通过驾驶汽车来改变,就像在真正的汽车中一样。只能通过驾驶汽车或添加燃料来更改燃料水平的值。这里总结一下 Car 类的构造函数和方法(公共接口)。
这是我的代码:
public class Car {
private double fuelEfficiency;
private double fuelLevel;
private double odometer;
public Car(double fuelEfficiency) {
this.fuelLevel = 0.0;
this.odometer = 0.0;
}
public Car(double fuelEfficiency, double fuelLevel) {
this.fuelLevel = fuelLevel;
this.fuelEfficiency = fuelEfficiency;
this.odometer = 0.0;
}
public double getFuelEfficiency() {
return this.fuelEfficiency;
}
public double getFuelLevel() {
return this.fuelLevel;
}
public double getOdometer() {
return this.odometer;
}
public double addFuel(double gallons) {
this.fuelLevel = this.fuelLevel + gallons;
return this.fuelLevel;
}
public double drive(double miles) {
double distance = (this.fuelLevel * this.fuelEfficiency);
if (distance > miles) {
distance = miles;
}
this.fuelLevel = (fuelLevel - (distance / fuelEfficiency));
this.odometer = odometer + distance;
return distance;
}
public String toString(){
return "MPG: " + this.fuelEfficiency + "miles: " + this.odometer + "fuel: " + this.fuelLevel;
}
}
这是我应该用来测试我的代码并且不应该更改的 PreTestDrive:
public class PreTestDrive
{
public static void main( String[] args )
{
Car car1 = new Car(25.5);
double fuelEfficiency = car1.getFuelEfficiency();
double fuelLevel = car1.getFuelLevel();
double odometer = car1.getOdometer();
if (fuelLevel != 0.0 || fuelEfficiency != 25.5 || odometer != 0.0)
{
System.out.println("1. There is a problem with your constructors.");
System.exit(0);
}
Car car2 = new Car(10.0, 5.0);
fuelEfficiency = car2.getFuelEfficiency();
fuelLevel = car2.getFuelLevel();
odometer = car2.getOdometer();
if (fuelLevel != 5.0 || fuelEfficiency != 10.0 || odometer != 0.0)
{
System.out.println("2. There is a problem with your constructors.");
System.exit(0);
}
String s1 = car1.toString();
if (! s1.equals("Car: mpg = 25.5, miles = 0.0, fuel = 0.0.") )
{
System.out.println("3. There is a problem with your toString() method.");
System.exit(0);
}
String s2 = car2.toString();
if (! s2.equals("Car: mpg = 10.0, miles = 0.0, fuel = 5.0.") )
{
System.out.println("4. There is a problem with your toString() method.");
System.exit(0);
}
double newFuelLevel = car1.addFuel(12.5).getFuelLevel();
fuelEfficiency = car1.getFuelEfficiency();
odometer = car1.getOdometer();
if(newFuelLevel != 12.5 || fuelEfficiency != 25.5 || odometer != 0.0)
{
System.out.println("5. There is a problem with your addFuel method.");
System.exit(0);
}
double distance = car1.drive(76.5);
if (distance != 76.5 || ! car1.toString().equals("Car: mpg = 25.5, miles = 76.5, fuel = 9.5."))
{
System.out.println("6. There is a problem with your drive method.");
System.exit(0);
}
distance = car1.drive(1000);
if (distance != 242.25 || ! car1.toString().equals("Car: mpg = 25.5, miles = 318.75, fuel = 0.0."))
{
System.out.println("7. There is a problem with your drive method.");
System.exit(0);
}
distance = car1.drive(1);
if (distance != 0.0 || ! car1.toString().equals("Car: mpg = 25.5, miles = 318.75, fuel = 0.0."))
{
System.out.println("8. There is a problem with your drive method.");
System.exit(0);
}
System.out.println("Your Car class passed all of these tests.");
}
}
当我运行 PreTestDrive 时,我收到错误 java: double cannot be dereferenced。有什么想法吗?
【问题讨论】:
-
您的
addFuel方法没有返回指令所说的应该返回的内容。 -
正如 khelwood 所指出的,这是因为您的方法返回一个双精度,而不是对象引用:car1.addFuel(12.5).getFuelLevel();
-
您的代码需要大量工作。您创建 Car1,然后设置 1 个值。然后你读回 3 个值(其中 2 个是空的)。然后调用 IF 语句,由于 2 个值未设置,您的程序将在 100% 的时间内停止。
标签: java class method-chaining