0

私は以下のコードを持っています:

int lines = 0;
while(lines < 2)
{
    int[] oldarr = parr;

    for(int i = 0; i < arrsize; i++)
        System.out.print(" " + oldarr[i]);
    System.out.println();

    for(int i = 0; i < arrsize; i++)
    {
        if(i == 0)
            parr[i] = 0;
        else
            parr[i] = Math.abs(oldarr[i] - oldarr[i-1]);
    }

    lines++;
}

parr は、サイズ [arrsize] の整数の配列です。このループのたびに、parr の各インデックスの値を出力し、各インデックスをその前のインデックスとそれ自体の差に設定します。現在、正しい(ハードコードされた)元のparrが得られます。しかし、parr を変更する次の (最初の) 反復では、予期しない値が返されます。それらは、隣接する 2 つの値の差にさえ近くありません。

何か案は?

4

2 に答える 2

4

次の行で配列をコピーしていません。

int[] oldarr = parr;

2 つの変数は、まだ同じ配列を指しています。

コピーを取得するには、次のようにします。

int[] oldarr = Arrays.copyOf(parr, parr.length);
于 2013-04-23T21:21:40.107 に答える
1

2 番目のforループでは、新しい値を現在の値と前の値の差に設定していますが、前の値はforループの前の繰り返しで既に変更されています。

for2 番目のループ反復を変更して、配列を逆方向に反復するようにします。これにより、計算が前の計算に依存しなくなります。

for(int i = arrsize - 1; i >= 0; i--)
于 2013-04-23T21:21:56.743 に答える