2016-10-31 43 views
0
public static void moveRight (int a[], int n){ 
    int aux; 
    for(int i = 1; i<n; i--){ 
     aux = a[i]; 
     a[i]= a [i]; 
    } 
} 

我一直在嘗試使用此代碼,但它不起作用。如何將整個數組向右移動一個位置?

+0

你讀過循環條件嗎? – Treycos

+0

爲什麼你認爲這個代碼會做任何事情? – shmosel

+0

請澄清「它不起作用」。從「*您爲自己分配一個值*」一直到「*您忘記編譯您的代碼*」,可能會導致該症狀的問題幾乎無限。 –

回答

1

首先,循環變量應該是上升的。所以請將i--更改爲i++。然後,如果我正確理解您要做什麼,則需要在循環體中使用a[i] = a[i-1]。而不是a[i] = a[i](它什麼都不做)。另外,你不需要aux

目前還不清楚,如果有什麼,當所有事情都向右移動時,你想要發生什麼,a[0]。這應該在循環結束後發生。 (如果你想讓最後一個元素移動到第一個元素位置,那麼我收回我對tmp的評論;你需要將最後一個元素存儲在某個地方,以便在數組元素被覆蓋後可用,但只需要將其保存起來一次,在循環開始之前)

一個其他評論:n絕不能超過a.length或者循環會引發異常。如果n總是等於a.length,那麼您可以放棄參數並在方法中使用a.length

0

打印數組的內容時,左邊從最低值開始。如果你將這些值向下移動,你可以說這是在左邊。要通過索引移動數值,您需要從最後開始並逐漸減少。

// 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); 
相關問題