2

我正在尝试从 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";
    }

}

最后一题方法

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

{

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

}

到目前为止我有这个,所以如果在参数中输入“红色”,它会列出所有红色的汽车及其相应的信息,但似乎不起作用〜_〜。

4

2 回答 2

7

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

另请注意,该参数carsIn不是必需的 - 只需获取length汽车数组的 (或者size()如果它是 a Collection)。

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

driveIn可能应该将 aCar作为参数,因此该方法可以访问您要存储的参数(我个人只会存储Car引用,但很好)。List由于我们将添加和删除这些参数,因此使用可以调整自身大小的 a 而不是数组会容易得多,例如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)

于 2012-11-08T05:00:56.817 回答
0

首先更改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[] carsParkedCar[] carsParked不丢弃信息。我还将更改driveInanddriveOut方法以返回布尔值,以指示汽车是否已成功停放或未停放。

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

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

于 2012-11-08T04:59:46.910 回答