2012-11-28 73 views
1

下面是我所做的家庭作業解決方案的一部分,我不知道他爲什麼有兩個for循環。如果是我,我會設置如果(carsParked [i] == c)然後設置carsParked [i] = null 我不明白爲什麼第二個循環語句可以解釋嗎?
順便說一句,CarsParked數組是汽車類的一種類型,用於存儲停放的汽車物體。簡單循環陣列

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); 
    } 
} 
+1

我們是否想讀懂你的想法,以便知道作業是什麼?或者從答案中反向設計它? –

+0

我不知道你的問題是什麼,但你爲什麼用'=='來檢查Car對象是否相等? – PermGenError

+0

這是我老師給我的解決方案。並試圖找出嵌套for循環的目的 – Aaron

回答

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]

+0

謝謝兄弟 – Aaron

3

看起來你正在尋找的目的是將所有非空值的向左移動,而不是離開零點的解決方案在數組的中間,這是你的建議會做的。

+0

對不起,你可以詳細說明這一點嗎?因爲當我設置carspaked [i] = null時,當我試圖將它們打印出來時,它給了我nullpointerexception。我猜他試圖避免這種情況,但我不明白這是怎麼回事 – Aaron

+0

這實際上取決於你打印出來的內容,但是你的解決方案可能是最終,汽車,零,汽車,而不是汽車,汽車,零,這看起來像你的老師的解決方案想要的。 –

+1

@Aaron - 你的老師只是將所有剩下的停放的汽車壓縮在賽車陣列的開始。如果您沒有壓縮它們,並且通過陣列循環打印出汽車,則在打印出來之前,您需要檢查NULL以查看汽車是否實際停放在那裏。 –

0

你在做什麼叫做嵌套循環。例如

for(num2 = 0; num2 <= 3; num2++) 
{ 
    for(num1 = 0; num1 <= 2; num1++) 
    { 
     System.out.println(num2 + " " + num1); 
    } 
} 
+0

我知道這是一個嵌套循環 – Aaron

+0

我以爲你問「我不知道他爲什麼有兩個循環」......我想我不明白你的問題。你能否澄清你想弄清楚什麼? – jsteinmann

+0

是的抱歉checl我上面的評論 – Aaron