我一直在努力工作,這一點:數組中的元素交換
說我有一個數組:
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
聲明沒有運氣做到這一點。有小費嗎?
我一直在努力工作,這一點:數組中的元素交換
說我有一個數組:
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
聲明沒有運氣做到這一點。有小費嗎?
試試這個:
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)
。如果這個條件成立,我們交換這兩個元素。
如果不使用位調換,則需要一個臨時變量來交換兩個對象。例如:
int[] n = {...};
int temp = n[3]; // swaps n[3] and n[4]
n[3] = n[4];
n[4] = temp;
你可以在你的循環內粘貼一些東西來完成你所描述的內容。
致敬:我明白你爲什麼這樣做。然而,我沒有發佈一個完整的解決方案,我只是發佈了一個簡單的例子,說明兩個變量如何經常交換,並提出瞭如何使用類似技術的建議。 – jli
即使發佈完整的解決方案,只要結合一些解釋,我都不會看到問題。閱讀[this](http://meta.stackexchange.com/questions/147100/the-homework-tag-is-now-officially-deprecated)(特別是評論)。 – arshajii
我引用[Tim Post](http://stackoverflow.com/users/50049/tim-post):「如果你不想要一個完整的審查,完整和可測試的答案,堆棧溢出不是要問的地方。 「 – arshajii
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;
}
}
應該工作。
投票的理由是很好的。 –
爲什麼不在i = 1開始你的循環,因爲你的if子句在檢查中的i> 0? –
的確,我可以做到這一點。但它不會使算法錯誤。 –
'「任何提示?」:是的 - 請[請告訴我們你試過的是什麼](http://mattgemmell.com/2008/12/08/what-have-you-tried/)。我們還有什麼可以猜測你可能做錯了什麼?我們還會如何知道您可能需要清除哪些誤解? –
太好了。這裏來了勺子餵食器。爲什麼不先等到我們看到OP首先嚐試了什麼? –
他們不完全是勺子餵養。我遇到的問題不是我問的問題的複製品,我只是需要類似的幫助,如果一個if語句和temp變量持有者對我解決我的實際問題有很大的幫助! 我明白爲什麼你有這種特殊的態度,但懸停。 感謝大家幫助,現在我只需要弄清楚爲什麼它會出現越界異常。 – Nicholas