传递数组并排序
Passing an Array and sort
大家好,我正在尝试使用数组对此处进行排序,请检查我的代码
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;
}
这里的问题是我将数组 'arr' 值传递给数组 'value' 并对 'value' 数组进行排序然后输出是我所期望的,他对数字进行了排序,但是问题是,当我尝试 return 'arr' 数组时,它也 return 一个排序值,即使我没有尝试对它进行排序..这是一个错误还是只是我的丑陋编码 ?
当您进行赋值 int[] value = arr
时,您为 value
提供了与 arr
相同的引用。这意味着分配,例如 value[1]
将影响原始数组。如果你想 return 一个 new 排序的数组而不影响原来的数组,那么你可以尝试复制它:
public int[] Sort(int[] arr) {
int[] value = new int[arr.length];
System.arraycopy(arr, 0, value, 0, arr.length);
// ...
return value;
}
这是另一种方法,您可以克隆数组并排序
int[] value = arr.clone();
对克隆数组的任何操作都不会影响原始数组。
Ex
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]
您的变量 arr
和 value
都指向 相同的 数组。
显然您认为您的排序操作应用于第二个数组。但是,不,您正在更改原始数组。
了解参考变量。这两个变量本身不是一个数组,它们是一个指针 指向 一个位于内存中其他地方的数组。所以这里有 三个 个“东西”在起作用。一个参考变量,另一个参考变量,和一个数组。三者互不相同。
当这些引用变量超出范围或被分配给另一个对象时,因此不再有引用变量指向数组对象,则数组对象成为garbage collection的候选对象。
您似乎想将数组复制到另一个数组。 Stack Overflow 有 many Questions and Answers on the topic of copying an array in Java for you to study. Like this one.
大家好,我正在尝试使用数组对此处进行排序,请检查我的代码
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;
}
这里的问题是我将数组 'arr' 值传递给数组 'value' 并对 'value' 数组进行排序然后输出是我所期望的,他对数字进行了排序,但是问题是,当我尝试 return 'arr' 数组时,它也 return 一个排序值,即使我没有尝试对它进行排序..这是一个错误还是只是我的丑陋编码 ?
当您进行赋值 int[] value = arr
时,您为 value
提供了与 arr
相同的引用。这意味着分配,例如 value[1]
将影响原始数组。如果你想 return 一个 new 排序的数组而不影响原来的数组,那么你可以尝试复制它:
public int[] Sort(int[] arr) {
int[] value = new int[arr.length];
System.arraycopy(arr, 0, value, 0, arr.length);
// ...
return value;
}
这是另一种方法,您可以克隆数组并排序
int[] value = arr.clone();
对克隆数组的任何操作都不会影响原始数组。
Ex
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]
您的变量 arr
和 value
都指向 相同的 数组。
显然您认为您的排序操作应用于第二个数组。但是,不,您正在更改原始数组。
了解参考变量。这两个变量本身不是一个数组,它们是一个指针 指向 一个位于内存中其他地方的数组。所以这里有 三个 个“东西”在起作用。一个参考变量,另一个参考变量,和一个数组。三者互不相同。
当这些引用变量超出范围或被分配给另一个对象时,因此不再有引用变量指向数组对象,则数组对象成为garbage collection的候选对象。
您似乎想将数组复制到另一个数组。 Stack Overflow 有 many Questions and Answers on the topic of copying an array in Java for you to study. Like this one.