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。非常感谢帮助,谢谢。
另外,我是这个论坛的新手,所以如果我没有遵循正确的格式,我很抱歉
非常感谢所有贡献的人!惊人而快速的回应!
答案 0 :(得分:2)
使用:
int[] a = new int[arr.length]
System.arraycopy( arr, 0, a, 0, arr.length);
复制内部的实际元素而不是数组的引用。 (复制引用意味着a
和arr
都将引用同一个对象,因此对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的末尾放置的 以相反的顺序。所以最后你得到对称数组