2014-10-19 32 views
1

我需要幫助重寫一個函數,以便System.arraycopy()完成函數的功能。製作System.Arraycopy相當於一個函數

例如,我的代碼:

for(int k = 0; k <= i - 1; k++) { 
    a[ j + k ] = a[ j + k + 1 ]; 
} 

等同於:

System.arraycopy(a, j + 1, a, j, i); 

但我無法弄清楚如何做到這一點的:

for (int k = n; k > i; k--) { 
    a[ j + k ] = a[ j + k - 1 ]; 
} 

感謝任何輸入。

+1

什麼是第二個循環應該做的?當'j + k> n-1'時,'j + k'是合法的下標嗎? – 2014-10-19 19:59:54

回答

1

讓我們首先簡化,因爲你的第二個循環似乎比必要的複雜一點。當n = 3,i = 1,j = 2時,你的循環將a = [1,2,3,4,5,6,7]變換爲a = [1,2,3,4,4,5, 7]。換句話說,循環將n-i個元素向右移動一個位置,從索引j + i開始。所以,實際上你只需要兩個參數而不是三個參數。 (我們定義它們爲x = NI和y = J +島)

現在,給定下列摘錄的Javadoc上System.arraycopy()

如果src和dest參數指代相同的數組對象,則執行復制,就好像從位置srcPos到srcPos + length-1的組件首先被複制到具有長度分量的臨時數組,然後臨時數組的內容被複制到位置destPos到destPos + length-1的位置目標數組。

我得出結論System.arraycopy(a, y, a, y+1, x);做你想要的。或者,如果您使用的變量是給定的,則爲System.arraycopy(a, j+i, a, j+i+1, n-i);

我沒有測試它,所以讓我知道,如果它的工作原理;)

0

它看起來像你的第二環擬通過移動n個元素我(獨家)(含)一個姿勢要正確:

System.arraycopy(a, i + 1, a, i + 2, n - i);