public static void moveRight (int a[], int n){
int aux;
for(int i = 1; i<n; i--){
aux = a[i];
a[i]= a [i];
}
}
我一直在嘗試使用此代碼,但它不起作用。如何將整個數組向右移動一個位置?
public static void moveRight (int a[], int n){
int aux;
for(int i = 1; i<n; i--){
aux = a[i];
a[i]= a [i];
}
}
我一直在嘗試使用此代碼,但它不起作用。如何將整個數組向右移動一個位置?
首先,循環變量應該是上升的。所以請將i--
更改爲i++
。然後,如果我正確理解您要做什麼,則需要在循環體中使用a[i] = a[i-1]
。而不是a[i] = a[i]
(它什麼都不做)。另外,你不需要aux
。
目前還不清楚,如果有什麼,當所有事情都向右移動時,你想要發生什麼,a[0]
。這應該在循環結束後發生。 (如果你想讓最後一個元素移動到第一個元素位置,那麼我收回我對tmp
的評論;你需要將最後一個元素存儲在某個地方,以便在數組元素被覆蓋後可用,但只需要將其保存起來一次,在循環開始之前)
一個其他評論:n
絕不能超過a.length
或者循環會引發異常。如果n
總是等於a.length
,那麼您可以放棄參數並在方法中使用a.length
。
打印數組的內容時,左邊從最低值開始。如果你將這些值向下移動,你可以說這是在左邊。要通過索引移動數值,您需要從最後開始並逐漸減少。
// Move one up
for (int i = a.length - 1; i > 0; i--)
a[i] = a[i-1];
// Move one down
for (int i = 0; i < a.length-1; i++)
a[i] = a[i+1];
注意:這很可能是inefficent使用arraycopy
被設計用於批量陣列副本進行比較。
// Move one up
System.arraycopy(a, 0, a, 1, a.length-1);
// Move one down
System.arraycopy(a, 1, a, 0, a.length-1);
你讀過循環條件嗎? – Treycos
爲什麼你認爲這個代碼會做任何事情? – shmosel
請澄清「它不起作用」。從「*您爲自己分配一個值*」一直到「*您忘記編譯您的代碼*」,可能會導致該症狀的問題幾乎無限。 –