1

以下は、私が持っていた宿題の解決策の一部であり、なぜ彼が 2 つの for ループを持っているのかわかりません。それが私だったら、if (carsParked[i] == c) を設定してから、carsParked[i]=null を設定します。なぜ 2 番目の 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

あなたが見ているソリューションは、null を配列の中央に残すのではなく、null 以外の値をすべて左に移動することを意図しているようです。これはあなたの提案が行うことです。

于 2012-11-28T00:13:02.887 に答える
2

5 つの cars: の配列があり[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]

于 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 に答える