有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

从父类获取参数的Java继承

我试图从Car的父类中获取一个参数,并将其添加到我的数组(carsParked),我如何才能做到这一点

父类

public class Car
{
    protected String regNo;       //Car registration number
    protected String owner;       //Name of the owner
    protected String carColor;

    /** Creates a Car object
     * @param rNo - registration number
     * @param own - name of the owner
     **/
    public Car (String rNo, String own, String carColour)
    {
        regNo = rNo;
        owner = own;
        carColor = carColour;
    }

    /** @return The car registration number
     **/
    public String getRegNo()
    {
        return regNo;
    }

    /** @return A String representation of the car details
     **/
    public String getAsString()
    {
        return "Car: " + regNo  + "\nColor: " + carColor;

    }
    public String getColor()
    {
        return carColor;
    }
}

儿童班

public class Carpark extends Car
{
    private String location;        // Location of the Car Park  
    private int capacity;           // Capacity of the Car Park - how many cars it can hold 
    private int carsIn;             // Number of cars currently in the Car Park   
    private String[] carsParked;

    /** Constructor for Carparks
     * @param loc - the Location of the Carpark
     * @param cap - the Capacity of the Carpark
     */
    public Carpark (String locations, int room)
    {

        location = locations;
        capacity = room;
    }
    /** Records entry of a car into the car park */
    public void driveIn()
    {
         carsIn = carsIn + 1;



    }

    /** Records the departure of a car from the car park */
    public void driveOut()
    {
        carsIn = carsIn - 1;
    }

    /** Returns a String representation of information about the carpark */
    public String getAsString()
    {
        return location + "\nCapacity: " + capacity +
             "  Currently parked:  " + carsIn + 
             "\n*************************\n";
    }

}

最后一题法

public String getCarsByColor (String carColour)

{

  for (int num = 0; num < carsParked.length; num++)
    {
        if ( carColour.equals(carsParked[num]) )
        {
            System.out.print (carsParked[num]);
        }
    }
return carColour;

}

到目前为止,如果在参数中输入“red”,它将列出所有红色车辆及其相应信息,但似乎不起作用


共 (2) 个答案

  1. # 1 楼答案

    你在这里似乎有错误的关系:停车场不是汽车。我建议不要在这些类之间使用任何方向的继承。而且Carpark应该只是拥有一系列汽车

    还要注意的是,参数carsIn不是必需的——只需获取cars数组的length(或者size(),如果它是Collection

    编辑:好的,忽略继承部分,似乎在调用driveIn时添加汽车,在调用driveOut时删除汽车是有意义的

    driveIn可能应该将Car作为参数,这样该方法就可以访问您想要存储的参数(我个人只想存储Car引用,但没问题)。因为我们要添加和删除这些参数,所以使用能够调整自身大小的List而不是像^{}这样的数组会容易得多。例如:

    private final List<String> carsRegNosParked = new ArrayList<String>();
    
    public void driveIn(Car car) {
        carsRegNosParked.add(car.getRegNo());
    }
    

    不太清楚driveOut应该做什么。可能需要特定的注册号才能删除:

    public void driveOut(String regNo) {
        carsRegNosParked.remove(regNo);
    }
    

    或者它可以不加区别地移除一辆车,第一辆车补充说:

    public void driveOut() {
        if (!carsRegNosParked.isEmpty()) {
            carsRegNosParked.remove(0);
        }
    }
    

    注意^{}^{}之间的区别

  2. # 2 楼答案

    首先将carsParked更改为列表。所以:

    private String[] carsParked;
    

    变成

    private List<String> carsParked;
    

    然后在构造函数中,通过执行以下操作将其初始化为空列表: carbleed=new ArrayList()

    然后,在“免下车”方法中,将其设置为一个car参数,并拉取所需的参数:

    public void driveIn(Car car) {
       carsParked.add(car.getRegNo());
    }
    

    而且你不需要用这种方式记录汽车的数量。因为你总是可以做carsParked.size()来找到答案。


    现在我可能会把这个列表改成List<Car>而不是字符串,然后把整辆车都扔进去。当然,你现在可能只需要一件物品,但谁知道接下来,你可能还需要别的东西。

    编辑: 当然你可以用一个简单的数组。问题在于尺寸。假设您最初创建了一个大小为5的数组,当您要添加6项时,您需要创建一个新的更大的数组,复制原始数据,然后添加新项。只是更多的工作。现在,如果你有一个停车场,它可以有X个点,那么你从一开始就初始化你的阵列到这个大小

    public Carpark (String locations, int room){
        location = locations;
        capacity = room;
        //this creates an array with the max number of spots
        carsParked = new String[capacity];
        //also good idea to init 
        carsIn = 0; //initial number of cars parked
    }
    

    然后在driveIn()方法中:

    public void driveIn(Car car) {
       carsParked[carsIn] =car.getRegNo();
       carsIn=carsIn+1;
    }
    

    现在driveOut()

    public void driveOut(Car car) {
       //loop through the array until we find the car
       for (int i=0; i < carsParked.length; i=i+1){
         if (car.getRegNo().equals(carsParked[i])){
            //we found the car, so set the space null
            carsParked[i] = null;
            carsIn=carsIn-1;
            //stop looping now
            break;
         }
       }
    }
    

    看起来不错,不是吗。不,不是。现在driveIn将不起作用,因为我们有零点分散在各地。我们如何修复它:

    public void driveIn(Car car) {
       //loop through the array until we find a null spot, 
       //then park the car
       for (int i=0; i < carsParked.length; i=i+1){
         if (carsParked[i] == null){
            //we found the car, so set the space null
            carsParked[i] = car.getRegNo();
            carsIn=carsIn+1;
            //stop looping now
            break;
         }
       }
    }
    

    它还可以进一步改进。我可能还是会把String[] carsParked改成Car[] carsParked,以免丢掉信息。 我还将更改driveIndriveOut方法,返回布尔值,以指示车辆是否成功停放或取消停放

    最终编辑: 好的,如果你想知道停车场里停着什么车,它们停在什么地方,你需要对每辆车都有足够的了解,让它独一无二。在您的情况下,您可能只需要regNo。因此,当您调用driveIndriveOut时,您必须传递该信息,以便我们可以将其存储在数组中适当的索引(停车位)中。否则你只会知道一辆车停在某个地方,或者一辆车离开了。不知道哪些地方是开放的

    简言之,这两种方法中的参数Car car包含唯一标识正在停放或正在离开的每辆车所需的信息。如果没有它,停车场实例将不知道当前停车的是谁,或者停车的位置