2014-06-06 14 views
-1

嘿所以我有這個家庭作業,我遇到了其中一種方法的問題。我想提示而不是實際的答案/代碼。在具有空值的數組中,如何將所有非空值合併在一起?

所以我有一個名爲HorseBarn的類,它與一排馬匹匹配(馬是類型的)。我的問題是我在整合方法上遇到麻煩。

陣列會是什麼樣子之前鞏固: A,B,C,d是馬

| A |空| B |空| C | d |

陣列將是什麼樣子鞏固後:

| A | B | C | d |空|空|

所以我的邏輯是做一個嵌套for循環。第一個循環會搜索空值,一旦第一個循環找到空值,第二個循環就會查找一個馬,然後與它交換。然後第二個循環結束並返回到第一個循環。所以這裏是我現在所擁有的,它不起作用(它只是終止)。我的邏輯錯了嗎?還是我的語法導致了問題?

public void consolidate() 
{ 
    int j = 0; 
    for(int i = 0; i < spaces.length;i++) 
    { 
     if(spaces[i] == null) 
     { 
      for(j = i; j < spaces.length && spaces[j] == null; j++) 
      { 

      } 
      spaces[i] = spaces[j]; 
      spaces[j] = null; 
     } 

    } 
+1

你的代碼乍一看似乎沒問題,你怎麼能說它不工作? –

+0

爲什麼內部的'for'循環是空的?它之後的陳述是否打算成爲循環的主體? –

+0

@DavidConrad,認爲它是一個「next-non-null」setter(它尋找下一個「非null」並將它設置在那裏:) –

回答

1

那麼對於初學者,這應該如果最後一個非空的發現給出一個索引越界異常,並仍然有剩餘的元素:

例如:horses = | a | null | null | null |

i = 1,因爲馬[1] - >馬[3]是空的,j首先被設置爲1,然後以j = 4結束(因爲終止條件j < horses.length()

然後,你會嘗試用馬[ 4],其中行數組索引超出範圍

+0

更好 - 將它分解爲一個'swap(arr,i,j)'函數:-) –

+0

@ReutSharabani這對索引越界有幫助嗎? –

+0

得到它的工作,非常感謝。謝謝Reut Sharabani也 – user3716335

0

在inner for循環中,只需找到下一個非空值的位置並將其分解即可。 然後把它與你的null交換。 更高效的時間代碼。

相關問題