Java继承 - 从父类获取参数



我正在尝试从汽车的父类中获取一个参数,然后将其添加到我的数组(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";
    }
}

最后一个问题方法

公共字符串getCarsByColor(字符串carcolour)

{

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

我到目前为止都有这个,以至于将"红色"放在参数中,它将列出所有带有红色的汽车,并且它是相应的信息,但似乎不起作用〜_〜。

您似乎在这里有错误的关系:停车场不是汽车。我建议不要在这些类之间的任何方向上使用继承。Carpark可能只有一个数组或收集汽车。

还请注意,参数carsIn不需要 - 只需获取汽车数组的length(或size(),如果是Collection)。

编辑:好吧,忽略继承部分,在调用driveIn时添加汽车似乎很有意义,并在调用driveOut时将其删除。

driveIn可能应将Car作为参数,因此该方法可以访问您要存储的参数(我个人我只会存储Car参考,但可以)。由于我们将添加和删除这些参数,因此可以使用可以调整自身大小的List而不是数组,例如ArrayList。例如:

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);
    }
}

请注意remove(Object)remove(int)

之间的区别

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

private String[] carsParked;

变成

private List<String> carsParked;

然后,在您中,构造函数将其初始化为空列表: carsparked = new arraylist();

然后,在方法中,使其具有汽车参数并拉动您想要的参数:

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包含唯一识别正在停放或离开的每辆汽车所需的信息。没有它,停车场的实例将不知道目前被停放的人或停放的地方。

最新更新