大家好,我正在尝试使用数组排序,检查我的代码
public int[] Sort(int[] arr) {
int[] value = arr;
int min, temp, out;
for (out = 0; out < value.length - 1; out++) {
for (min = out + 1; min < value.length; min++) {
if(value[out] > value[min]){
temp = value[min];
value[min] = value[out];
value[out] = temp;
}
}
}
return value;
}
这里的问题是我通过了数组&#39; arr&#39;数值的值&#39;值&#39;并对&#39;值进行排序&#39;数组然后输出是我所期望的,他对数字进行了排序,但问题是,当我试图返回&#39; arr&#39;数组它也返回一个排序值,即使我没有尝试对它进行排序..这是一个错误还是只是我丑陋的编码?
答案 0 :(得分:1)
当您完成作业int[] value = arr
时,您会value
提供与arr
相同的引用。这意味着分配例如value[1]
将影响原始数组。如果要返回 new 排序数组而不影响原始数组,则可以尝试复制它:
public int[] Sort(int[] arr) {
int[] value = new int[arr.length];
System.arraycopy(arr, 0, value, 0, arr.length);
// ...
return value;
}
答案 1 :(得分:0)
这是另一种方法,您可以克隆数组并进行排序
int[] value = arr.clone();
克隆数组上的任何操作都不会影响原始数组。
<强>实施例强>
int[] arr = { 1, 4, 3 };
int[] a = arr.clone();
a[2] = 5;
System.out.println(Arrays.toString(arr));
System.out.println(Arrays.toString(a));
<强>输出强>
[1, 4, 3]
[1, 4, 5]
答案 2 :(得分:0)
您的变量arr
和value
都指向相同的数组。
显然你认为你的排序操作适用于第二个数组。但是,不,你正在改变原来的数组。
了解参考变量。这两个变量本身不是一个数组,它们是指向的指针一个存在于内存中其他位置的数组。所以这里有三个“东西”。一个引用变量,另一个引用变量和一个数组。这三者彼此不同。
当这些引用变量超出范围或被分配给另一个对象时,不再有引用变量指向数组对象,那么数组对象就成为garbage collection的候选者。
似乎您要将数组复制到另一个数组。 Stack Overflow在many Questions and Answers主题上有copying an array in Java供您学习。与this one一样。