我们得到了一个赋值,有2个(完整的)类Motorcycle
和Car
,并且要求创建一个抽象类Vehicle
,它还应该包含一个抽象方法(我猜对了)用于计算车辆税)和所有公共方法的CarIF
接口(我不确定这是什么意思)。
我创建了以下代码,并编辑了Motorcycle
和Car
,以便它们不包含颜色和cylinderCapacity
,并创建了一个测试文件以查看它是否有效,但是当我尝试编译它时,我得到
missing return statement
在我的Vehicle
课程中。
每当我尝试在我的Motorcycle
中向Test.java
添加任何内容时,我都会收到错误,即没有预期的参数。是因为我缺少一个构造函数,这是否意味着我需要在cylinderCapacity
中的构造函数中添加颜色和Car
?
(我把它们放在单独的文件中,但是我把它们放在一起作为代码发布在这里。)
public abstract class Vehicle
{
private String color;
private double cylinderCapacity;
public double getCylinderCapacity() {
return cylinderCapacity;
}
public double setCylinderCapacity(double cylinderCapacity) { //Don't change the original issue otherwise anybody looking at this question may get confused.
this.cylinderCapacity = cylinderCapacity;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
public abstract double calculateMotorVehicleTax ();
}
public interface CarIF {
void printInfo();
}
public class Motorcycle extends Vehicle implements CarIF {
@Override
public double calculateMotorVehicleTax() {
return Math.ceil(cylinderCapacity / 25) * 1.84;
}
public void printInfo() {
System.out.println("I'm a " + this.getClass().getSimpleName() + ".");
}
}
public class Car extends Vehicle implements CarIF {
private int engineType;
private double co2Emission;
public Car(int engineType, double co2Emission) {
this.engineType = engineType;
this.co2Emission = co2Emission;
}
public int getEngineType() {
return engineType;
}
public double getCo2Emission() {
return co2Emission;
}
@Override
public double calculateMotorVehicleTax() {
double tax = (engineType == 0) ? 2.0 : 9.5;
double _co2Emission = co2Emission - 95;
if(_co2Emission < 0) {
_co2Emission = 0;
}
return Math.ceil(cylinderCapacity / 100) * tax + _co2Emission * 2.0;
}
public void printInfo() {
System.out.println("I'm a " + this.getClass().getSimpleName() + ".");
}
}
public class Test {
public static void printTax(Vehicle o) {
System.out.print("Tax: ");
System.out.println(o.calculateMotorVehicleTax());
}
public static void main(String[] args) {
Car c = new Car("blue", red, 3, 5);
Motorcycle m = new Motorcycle("red", 9,);
printTax(c);
printTax(m);
}
}
答案 0 :(得分:3)
如果你的方法的返回类型是void
,那么你的方法中应该有无条件调用的return
语句。
如果您没有返回任何public double setCylinderCapacity(...){}
值,那么您的double
方法的retunr类型为double
。因此发生Missing return statement
。
返回您的方法名称未建议的double
或将返回类型更改为void
。
答案 1 :(得分:1)
您应该将一个构造函数添加到您的Vehicle类,MotorCycle类并更改您的汽车类中的构造函数。您的Vehicle构造函数应该如下所示
public Vehicle(String color, Double cylinderCapacity){
this.color = color;
this.cylinderCapacity = cylinderCapacity;
}
你的MotorCycle构造函数应如下所示:
public MotorCycle(String color, double cyclinderCapacity){
super(color, cylinderCapacity)//this calls the vehicle constructor
}
您的汽车构造函数与测试中的参数不匹配。如果你想在汽车构造函数中添加颜色和cylindeCapacity,只需在参数中添加颜色和CylinderCapacity,然后在构造函数体中调用超级构造函数,就像我在MotorCycle构造函数中所做的那样。
此外,您的double setCylinderCapacity(double cylinderCapacity)
方法缺少返回类型。我假设该方法仅用于设置值,因此只需将double更改为void,例如
void setCylinderCapacity(double cylinderCapacity)
希望这有帮助