以下是我所做的家庭作业解决方案的一部分,我不知道为什么他有两个for循环。如果是我,我会设置if(carsParked [i] == c)然后设置carsParked [i] = null 我不明白为什么第二个循环语句可以解释? 顺便说一句,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);
}
}
答案 0 :(得分:3)
看起来你正在寻找的解决方案是将所有非空值移到左边,而不是将空值留在数组的中间,这就是你的建议。
答案 1 :(得分: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]
然后在循环之外,最后一个条目设置为null,为您留下[Car1, Car2, Car4, Car5, null]
答案 2 :(得分:0)
你正在做的事情被称为嵌套循环。例如
for(num2 = 0; num2 <= 3; num2++)
{
for(num1 = 0; num1 <= 2; num1++)
{
System.out.println(num2 + " " + num1);
}
}