0

你好 StackOverflow 的人们!我使用了 searcherch 选项,我找到了一些相关的答案,但没有一个解释为什么这种在 Java 中对数组进行反向排序的特殊方法不起作用:

class ReverseOrder
{
    public static void main(String[] args)
    {
        int x[] = {1,2,3,4,5};
        int y[] = x;

        int i, j;
        for(i = 0, j = x.length - 1; i < x.length; i++, j--)
        {
            y[i] = x[j];
        }

        for(int b = 0; b < x.length; b++)
        {
            System.out.println("Inverse order is: " + y[b]);
        }
    }
}

为什么结果是 5,4,3,4,5 而不是 5,4,3,2,1???它把我逼疯了,对我来说毫无意义。任何帮助将不胜感激!

4

4 回答 4

7

正因为如此: int y[] = x

y 和 x 现在是对同一个数组的引用。您应该确保将 y 初始化为新数组。

于 2012-06-26T17:31:49.020 回答
2
class ReverseOrder {
    public static void main(String[] args)
    {

        int x[] = {1,2,3,4,5};
        int y[] = new int[5]; // or you could use [x.length]
        int i, j;
        for(i = 0, j = x.length - 1; i < x.length; i++, j--)
        {
            y[i] = x[j];
        }

        for(int b = 0; b < x.length; b++)
        {
            System.out.println("Inverse order is: " + y[b]);
        }
    }
}
于 2012-06-26T17:47:18.220 回答
1

如果你想在原地颠倒数组元素的顺序(即x直接修改数组),你可以遍历数组的一半,交换元素:

final int last = x.length - 1;
final int n_2 = x.length / 2; // round down for odd lengths
for (int i = 0; i < n_2; ++i) {
    int tmp = x[i];
    x[i] = x[last - i];
    x[last - i] = tmp;
}
于 2012-06-26T17:41:33.847 回答
1
int y[] = x;

使 y 引用与 x 相同的数据。

y[i] = x[j];

您还在修改输入数组 x。

您希望 y 完全独立:

int y[] = new int[x.length];

反而。

于 2012-06-26T17:33:18.973 回答