在抽象类中缺少返回语句而没有预期的参数

时间:2017-01-11 19:00:53

标签: java

我们得到了一个赋值,有2个(完整的)类MotorcycleCar,并且要求创建一个抽象类Vehicle,它还应该包含一个抽象方法(我猜对了)用于计算车辆税)和所有公共方法的CarIF接口(我不确定这是什么意思)。

我创建了以下代码,并编辑了MotorcycleCar,以便它们不包含颜色和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);
    }
}

2 个答案:

答案 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)

希望这有帮助