我正在尝试从汽车的父类中获取一个参数,然后将其添加到我的数组(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
,以免丢弃信息。我还将更改driveIn
和driveOut
的方法,以返回布尔值,以指示成功停放或未公开的汽车。
最终编辑:好的,如果您想跟踪停在停车场中的汽车,并且他们在哪个地方需要足够了解每辆汽车以使其与众不同。在您的情况下,您可能只需要regNo
。因此,当您致电driveIn
或driveOut
时,您必须传递该信息,以便我们可以将其存储在数组中的适当索引(停车位)。否则,您所知道的只是一辆汽车停在某个地方,或者剩下的汽车。不是打开哪些斑点。
因此,简而言之,这两种方法中的参数Car car
包含唯一识别正在停放或离开的每辆汽车所需的信息。没有它,停车场的实例将不知道目前被停放的人或停放的地方。