2016-10-31 2 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]; 
    } 
} 

このコードで試してみましたが、うまくいきません。配列全体を右に1ポジションシフトする方法は?

+0

ループ条件を読んだことはありますか? – Treycos

+0

なぜこのコードが何かをすると思いますか? – shmosel

+0

「動作しません」と明記してください。 "*あなたは自分自身に価値を割り当てる*"から "*あなたのコードをコンパイルするのを忘れました*"というような症状につながる問題はほぼ無限にあります。 –

答えて

1

まず、ループ変数が上がっているはずです。そのためi--i++に変更してください。次に、あなたがしようとしていることを正しく理解していれば、ループ本体にa[i] = a[i-1]が必要です。 a[i] = a[i]の代わりに(何もしません)。また、auxは必要ありません。

すべてが右に移動したら、a[0]に何が起こりたいのかは分かりません。これは、ループが終了した後に行われます。 (最後の要素を最初の要素位置に移動させたい場合は、tmpについての私のコメントを後退させるため、最後の要素をどこかに格納して、配列要素が上書きされた後に利用できるようにする必要があります。ループが始まる前に一度)。

もう1つのコメント: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]; 

注:これはバルク・アレイ・コピーのために設計されarraycopyを用いて比較inefficentである可能性が高いです。

// Move one up 
System.arraycopy(a, 0, a, 1, a.length-1); 
// Move one down 
System.arraycopy(a, 1, a, 0, a.length-1); 
関連する問題