1

以下是我的家庭作业解决方案的一部分,我不知道为什么他有两个 for 循环。如果是我,我会设置 if (carsParked[i] == c) 然后设置 carsParked[i]=null 我不明白为什么第二个 for 循环语句谁能解释?
顺便说一句,CarsParked 数组是一种 Car 类,它存储停放的汽车对象。

public void driveOut(Car c)
{
    for (int i=0; i<carsParked.length; i++) // Loop through the carParked array
    {
        if(carsParked[i] == c) // Find Car c at index i
        {
            //carsParked, remove(c);
            for (int j=i; j<carsIn-1; j++)
            {
                carsParked[j] = carsParked[j+1];
            }
            carsParked[carsIn-1] = null; 
            carsIn = carsIn - 1;
        }
    }
}

汽车是这样停放的

public void driveIn(Car c)
{
    if(carsIn < carsParked.length)
    {
        carsParked[carsIn] = c;
        carsIn = carsIn + 1;
    }
    else // error message
    {
         System.out.println("Park " + location + " is full, for " + c);
    }
}
4

3 回答 3

3

看起来您正在查看的解决方案旨在将所有非空值移到左侧,而不是将空值留在数组中间,这就是您的建议。

于 2012-11-28T00:13:02.887 回答
2

假设您有一个包含 5 辆汽车的数组:[Car1, Car2, Car3, Car4, Car5],然后调用方法driveOut(Car3)

通过在找到它时将值设置为 null,您最终会得到[Car1, Car2, null, Car4, Car5]. 这种做法会导致NullPointerException类型错误,因为null值在数组的中间,并且数据没有被压缩。

解决方案基本上是通过从该点开始并将剩余的汽车向左移动来消除差距:

Inner loop rev 1: [Car1, Car2, Car4, Car4, Car5]
Inner loop rev 2: [Car1, Car2, Car4, Car5, Car5]

然后在循环之外,最后一个条目设置为空,留下你[Car1, Car2, Car4, Car5, null]

于 2012-11-28T00:27:34.300 回答
0

您正在做的事情称为嵌套循环。例如

for(num2 = 0; num2 <= 3;  num2++)
{
    for(num1 = 0; num1 <= 2; num1++)
    {
        System.out.println(num2 + "   " + num1);
    }
}
于 2012-11-28T00:15:12.450 回答