为什么此输出显示0.0而不是我的预期值?

问题描述 投票:-3回答:1

A:使Vehicle为抽象类,并向其添加以下抽象方法:

浮动运行成本(int hours_of_operation);它接收运行小时数作为参数,并返回车辆的运行成本。 Car和Airplane类将按以下方式实现此方法:

对于Car类,定义一个名为cost_per_cylinder_per_hour的私有浮点型实例变量,并将其初始化为您选择的值。汽车的runningCost等于:运营小时x成本每缸每小时x缸数

对于Airplane类,定义一个名为cost_per_engines_per_hour的私有float实例变量,并将其初始化为您选择的值。一架飞机的运行成本等于:运营小时x成本引擎每引擎小时x引擎数量

B:编写一个称为maintainable的接口,该接口具有以下方法:

float maintenanceCost(float cost_Per_Unit);它接收发动机或气缸的单位成本作为参数,并返回维护成本。 Car和Airplane类将实现此接口,如下所示:

对于汽车类,汽车的维护成本将等于:cost_Per_Unit x缸数

对于飞机类,飞机的维护成本将等于:cost_Per_Unit x发动机数量

C:向Vehicle类添加String toString()方法。打印车辆时,将显示其名称和max_speed。另外,向Car和Airplane类中添加String toString()方法。 Car和Airplane类的String toString()方法将显示以下内容:

打印汽车时,将显示其名称,max_speed,缸数和cost_per_cylinder_per_hour。

打印飞机时,将显示其名称,max_speed,发动机数量和cost_per_engines_per_hour。

编辑:实现接口似乎可以解决与抽象错误有关的问题。但是现在我很难显示正确的值。

代码:

public abstract class Vehicle
{
   private String name;
   private double max_speed;

   public Vehicle(String n, double top_speed)
   {
      name = n;
      max_speed = top_speed;
   }
   public void setName(String n)
   {
      name = n;
   }
   public void setMaxSpeed(double top_speed)
   {
      max_speed = top_speed;
   }
   public String getName()
   {
      return name;
   }
   public double getMaxSpeed()
   {
      return max_speed;
   }
   public String toString()
   {
      String info = "Vehicle name: " + name + "\ntop speed: " + max_speed;
      return info;
   }
   public abstract float runningCost(int hours_of_operation);
}
-------------------------------------------------------------
public class Airplane extends Vehicle implements Maintainable
{
   private int number_of_engines;
   private float cost_per_engines_per_hour;

   public Airplane(String n, double top_speed, int engines)
   {
      super(n, top_speed);
      number_of_engines = engines;
   }
   public void setEngineNumber(int engines)
   {
      number_of_engines = engines;
   }
   @Override
   public float runningCost(int hours_of_operation)
   {
      float runningCost;
      cost_per_engines_per_hour = 39.0f;
      runningCost = hours_of_operation * cost_per_engines_per_hour * number_of_engines;
      return runningCost;
   }
      public float maintenanceCost(float cost_PEr_Unit)
   {
      float maintenanceCost = cost_Per_Unit * number_of_engines;
   }
   public int getEngineNumber()
   {
      return number_of_engines;
   }
   public String toString()
   {
      String planeInfo = super.toString() + ", number of engines: " + number_of_engines;
      return planeInfo;
   }
}
---------------------------------------------------------
public class Car extends Vehicle implements Maintainable
{
   private int number_of_cylinders;
   private float cost_per_cylinder_per_hour;
   private float maintenance_cost;
   private float running_cost;

   public Car(String n, double top_speed, int cylinders)
   {
      super(n, top_speed);
      number_of_cylinders = cylinders;
   }
   public void setCylinderNumber(int cylinders)
   {
      number_of_cylinders = cylinders;
   }
   @Override
   public float runningCost(int hours_of_operation)
   {
      cost_per_cylinder_per_hour = 13.0f;
      float running_cost;
      running_cost = hours_of_operation * cost_per_cylinder_per_hour * number_of_cylinders;
      return running_cost;
   }
   public float maintenanceCost(float cost_Per_Unit)
   {
      float maintenance_cost = cost_Per_Unit * number_of_cylinders;
      return maintenance_cost;
   }
   public int getCylinderNumber()
   {
      return number_of_cylinders;
   }

   public String toString()
   {
      String carInfo = super.toString() + "\nnumber of cylinders: " + number_of_cylinders + "\nMaintenance cost: " + maintenance_cost + "\nRunning cost(Per hour):" + running_cost;
      return carInfo;
   }
}
--------------------------------------------------------------
public interface Maintainable
{
   float maintenanceCost(float cost_Per_Unit);
}
--------------------------------------------------------------
output:

Vehicle name: Lamborghini Diablo SV
top speed: 204.0
number of cylinders: 12
Maintenance cost: 0.0
Running Cost(Per hour):0.0
Vehicle name: Boeing 767
top speed: 754.6, number of engines: 2
java interface abstract-class
1个回答
0
投票

您从未在任何一个类中实际实现Maintainable接口。当您声明一个类实现一个接口时,基本上就是“有希望”实现该接口指定的所有方法。

因此您需要在每个类中创建一个maintenanceCost方法,该方法接受一个float作为参数并返回一个float。

该方法应实际包含的详细信息在需求文档中。

© www.soinside.com 2019 - 2024. All rights reserved.