数组中的手动反向顺序(Java)

时间:2012-06-26 17:29:59

标签: java arrays sorting reverse

StackOverflow的大家好! 我使用了searrch选项,我发现了一些相关的答案,但没有一个解释为什么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 个答案:

答案 0 :(得分:7)

因此: int y [] = x

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

答案 1 :(得分: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]);
        }
    }
}

答案 2 :(得分:1)

int y[] = x;

使y指向与x相同的数据。

y[i] = x[j];

您也在修改输入数组x。

你希望你完全独立:

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

代替。

答案 3 :(得分: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;
}