传递数组并排序

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]

您的变量 arrvalue 都指向 相同的 数组。

显然您认为您的排序操作应用于第二个数组。但是,不,您正在更改原始数组。

了解参考变量。这两个变量本身不是一个数组,它们是一个指针 指向 一个位于内存中其他地方的数组。所以这里有 三个 个“东西”在起作用。一个参考变量,另一个参考变量,和一个数组。三者互不相同。

当这些引用变量超出范围或被分配给另一个对象时,因此不再有引用变量指向数组对象,则数组对象成为garbage collection的候选对象。

您似乎想将数组复制到另一个数组。 Stack Overflow 有 many Questions and Answers on the topic of copying an array in Java for you to study. Like this one.