-1

次のコードを書きました。

for (int i = 0; i < rounds; i++){
        result = rotate(result);
        res[i] = result; 
    }        
        System.out.println(Arrays.toString(res[1]));

ただし、回転からの出力を監視しても、次の出力が得られます。

[87, 56, 119, 111, 111, 114, 100, 33, 49, 50, 51]
[56, 119, 111, 111, 114, 100, 33, 49, 50, 51, 87]
[119, 111, 111, 114, 100, 33, 49, 50, 51, 87, 56]
[111, 111, 114, 100, 33, 49, 50, 51, 87, 56, 119]
[111, 114, 100, 33, 49, 50, 51, 87, 56, 119, 111]
[114, 100, 33, 49, 50, 51, 87, 56, 119, 111, 111]
[100, 33, 49, 50, 51, 87, 56, 119, 111, 111, 114]
[33, 49, 50, 51, 87, 56, 119, 111, 111, 114, 100]
[33, 49, 50, 51, 87, 56, 119, 111, 111, 114, 100]

最初のものは回転していません。2枚目は回転などで数字のズレが見られます。この新しい数値配列は、何らかの理由で配列 res に保存されません。この場合、最後の出力は 2 番目の出力と同じである必要がありますが、何らかの理由で常に最後の出力の前 (33 から始まる) になります。間違いがわかりません、助けてください。

編集:申し訳ありません。これがrotate()のコードです:

public static byte[] rotate(byte[] a) {
//store initial array in a temporary variable
int Array = a[0];
int i;
for (i = 0; i < a.length - 1; i++) {
    // Move each item up one spot
    a[i] = a[i + 1]; 
}

// At the end of the array, put what was stored.
a[a.length -1] = (byte) Array;
System.out.println(Arrays.toString(a));

// You can't print the array itself, you print its elements
//System.out.println(a);
return (a);

rotate() からの出力は正しいので、私はそれが必要だとは思いませんでした。何らかの理由で配列に配置されないだけです。(したがって、2 次元配列、配列内の配列)。

4

2 に答える 2

2

回転の実装を見てください。結果に新しい配列を割り当てていない場合、「res」内の各参照は同じ配列オブジェクトを指します。

于 2013-02-28T00:07:31.123 に答える