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ポジションシフトする方法は?
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ポジションシフトする方法は?
まず、ループ変数が上がっているはずです。そのためi--
をi++
に変更してください。次に、あなたがしようとしていることを正しく理解していれば、ループ本体にa[i] = a[i-1]
が必要です。 a[i] = a[i]
の代わりに(何もしません)。また、aux
は必要ありません。
すべてが右に移動したら、a[0]
に何が起こりたいのかは分かりません。これは、ループが終了した後に行われます。 (最後の要素を最初の要素位置に移動させたい場合は、tmp
についての私のコメントを後退させるため、最後の要素をどこかに格納して、配列要素が上書きされた後に利用できるようにする必要があります。ループが始まる前に一度)。
もう1つのコメント: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];
注:これはバルク・アレイ・コピーのために設計され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);
ループ条件を読んだことはありますか? – Treycos
なぜこのコードが何かをすると思いますか? – shmosel
「動作しません」と明記してください。 "*あなたは自分自身に価値を割り当てる*"から "*あなたのコードをコンパイルするのを忘れました*"というような症状につながる問題はほぼ無限にあります。 –