循环更改之外的数组(JAVA)

时间:2014-11-29 21:22:11

标签: java arrays

public static void reverse(int[] arr)
    {
        int[] a= arr;
        int index=a.length-1;
        for (int i=0; i<a.length; i++){
            System.out.println(ArrayUtil.toString(a));
            if (index>=0){
                arr[index]=a[i];
                index--;
            }
        }
    }

所以,我试图颠倒给定数组中元素的顺序。我宣布了另一个临时数组&#34; a&#34;这与给定的数组相同。但是,当通过循环来反转顺序或元素时,不知何故,数组&#34; a&#34;也正在改变。我不明白这是怎么回事。 int [] arr在这种情况下是[14,2,19,3,15,22,18,7],最终结果是[14,2,19,3,3,19,2,14] [ ] arr和[] a。非常感谢帮助,谢谢。

另外,我是这个论坛的新手,所以如果我没有遵循正确的格式,我很抱歉

非常感谢所有贡献的人!惊人而快速的回应!

4 个答案:

答案 0 :(得分:2)

使用:

int[] a = new int[arr.length]
System.arraycopy( arr, 0, a, 0, arr.length);

复制内部的实际元素而不是数组的引用。 (复制引用意味着aarr都将引用同一个对象,因此对a的任何更改也都会更改为arr。这对所有对象都会发生,而不仅仅是通过值复制的基元

答案 1 :(得分:1)

为此更改算法。即使您将修复代码,使其工作,您也将使用额外的内存。更好用:

for (int i = 0; i < a.length / 2; i++){
            int tmp = a[i];
            a[i] = a[a.length - i - 1];
            a[a.length - i - 1] = tmp;
        }

答案 2 :(得分:0)

arr的任何修改都会更改a,反之亦然,因为它们是对同一数组的引用。如果需要两个独立的数组,则需要完全复制数组:

int[] a = new int[arr.length];
for (int i = 0; i < a.length; i++) a[i] = arr[i];

或使用System.arrayCopy

int[] a = new int[arr.length];
System.arraycopy(arr, 0, a, 0, a.length);

答案 3 :(得分:0)

实际上是

int[] a= arr;

相同数组的引用被赋予数组a。 当你反向为arr赋值时,这些值实际上是从a的末尾放置的 以相反的顺序。所以最后你得到对称数组