-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]

第一个是未旋转的;第二个旋转等等。你可以看到数字的变化。由于某种原因,这个新的数字数组没有保存在我的数组 res 中。在这种情况下,最后一个输出应该与第二个输出相同,但由于某种原因,它总是在最后一个输出之前(从 33 开始)。我看不到我的错误,请帮助我。

编辑:对不起。这是旋转()的代码:

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() 的输出是正确的。由于某种原因,它只是没有被放置在数组中。(因此是二维数组,数组中的数组)。

4

2 回答 2

2

看看你的旋转实现。如果它没有为结果分配一个新数组,那么你在“res”中的每个引用都将指向同一个数组对象。

于 2013-02-28T00:07:31.123 回答
0

对不起。这是旋转()的代码:

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() 的输出是正确的。由于某种原因,它只是没有被放置在数组中。(因此是二维数组,数组中的数组)。

于 2013-02-28T08:32:29.993 回答