传递数组并排序

时间:2016-06-09 03:10:21

标签: java arrays bubble-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;
 }

这里的问题是我通过了数组&#39; arr&#39;数值的值&#39;值&#39;并对&#39;值进行排序&#39;数组然后输出是我所期望的,他对数字进行了排序,但问题是,当我试图返回&#39; arr&#39;数组它也返回一个排序值,即使我没有尝试对它进行排序..这是一个错误还是只是我丑陋的编码?

3 个答案:

答案 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)

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

显然你认为你的排序操作适用于第二个数组。但是,不,你正在改变原来的数组。

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

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

似乎您要将数组复制到另一个数组。 Stack Overflow在many Questions and Answers主题上有copying an array in Java供您学习。与this one一样。