2012-09-29 76 views
2

我一直在努力工作,這一點:數組中的元素交換

說我有一個數組:

int[] n = {0, 0, -1, 1, 0, 1, 1, -1, 1}; 

我需要能夠通過數組排序,如果有一個在它之前有一個非零的零,那麼它們應該交換。

例如:0, 0, -1, 1, 0, 1, 1, -1, 1

將變爲:0, 0, -1, 0, 1, 1, 1, -1, 1

我一直在嘗試使用for環和if聲明沒有運氣做到這一點。有小費嗎?

+5

'「任何提示?」:是的 - 請[請告訴我們你試過的是什麼](http://mattgemmell.com/2008/12/08/what-have-you-tried/)。我們還有什麼可以猜測你可能做錯了什麼?我們還會如何知道您可能需要清除哪些誤解? –

+4

太好了。這裏來了勺子餵食器。爲什麼不先等到我們看到OP首先嚐試了什麼? –

+0

他們不完全是勺子餵養。我遇到的問題不是我問的問題的複製品,我只是需要類似的幫助,如果一個if語句和temp變量持有者對我解決我的實際問題有很大的幫助! 我明白爲什麼你有這種特殊的態度,但懸停。 感謝大家幫助,現在我只需要弄清楚爲什麼它會出現越界異常。 – Nicholas

回答

3

試試這個:

for (int i = 1 ; i < n.length ; i++) 
    if (n[i] == 0 && n[i - 1] != 0) { 
     int tmp = n[i - 1]; 
     n[i - 1] = n[i]; 
     n[i] = tmp; 
    } 

你是正確的思維,你會需要一個for環在其身體的if聲明。我們在這裏所做的是從元素1開始遍歷數組。然後檢查我們當前所在的元素是否爲0上一個元素不是0:即if (n[i] == 0 && n[i - 1] != 0)。如果這個條件成立,我們交換這兩個元素。

0

如果不使用位調換,則需要一個臨時變量來交換兩個對象。例如:

int[] n = {...}; 
int temp = n[3]; // swaps n[3] and n[4] 
n[3] = n[4]; 
n[4] = temp; 

你可以在你的循環內粘貼一些東西來完成你所描述的內容。

+1

致敬:我明白你爲什麼這樣做。然而,我沒有發佈一個完整的解決方案,我只是發佈了一個簡單的例子,說明兩個變量如何經常交換,並提出瞭如何使用類似技術的建議。 – jli

+0

即使發佈完整的解決方案,只要結合一些解釋,我都不會看到問題。閱讀[this](http://meta.stackexchange.com/questions/147100/the-homework-tag-is-now-officially-deprecated)(特別是評論)。 – arshajii

+0

我引用[Tim Post](http://stackoverflow.com/users/50049/tim-post):「如果你不想要一個完整的審查,完整和可測試的答案,堆棧溢出不是要問的地方。 「 – arshajii

2
for(int i=0; i < length; i++) 
{ 
    if(i > 0 && arr[i] == 0 && arr[i-1] != 0) 
    { 
     int temp = arr[i-1]; 
     arr[i-1] = arr[i]; 
     arr[i] = temp; 
    } 
} 

應該工作。

+2

投票的理由是很好的。 –

+4

爲什麼不在i = 1開始你的循環,因爲你的if子句在檢查中的i> 0? –

+0

的確,我可以做到這一點。但它不會使算法錯誤。 –