You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何数组升序、降序排序仅能输出其中一种结果?

为什么同一数组的升序/降序排序结果只能输出一种?

这完全和线程无关,问题出在Java数组的引用传递特性上:

  • Java里数组属于引用类型,当你把原数组arr传入sort或reverseSort方法时,方法内部操作的是原数组的内存地址,不是数组的副本。
  • 你先调用obj1.sort(arr),这个方法已经把原数组arr改成了降序排列;接着调用obj2.reverseSort(arr)时,它操作的是已经被排序过的数组,最后arr1和arr2其实指向的是同一个数组对象,自然输出结果完全一致。
  • 你代码里提前创建的arr1 = new int[arr.length];和arr2 = new int[arr.length];根本没起作用,因为后面直接把方法返回的数组引用赋值给了它们,覆盖了之前创建的空数组。

简单说:两个排序方法都在修改同一个数组,后执行的排序会覆盖前一个的结果,最后两个变量指向的都是被最后一次排序修改后的数组。

如果要分别得到两种排序结果,核心是让每个排序方法操作不同的数组副本,比如在调用方法前复制原数组:

int[] arr1 = obj1.sort(Arrays.copyOf(arr, arr.length));
int[] arr2 = obj2.reverseSort(Arrays.copyOf(arr, arr.length));

你的完整代码如下:

package Test1;

import java.util.Arrays;

public class HighestLowestActivity2 {

public int [] sort(int arr[]) {
    
    for (int i = 0; i < arr.length; i++) {

        // Inner nested loop pointing 1 index ahead
        for (int j = i + 1; j < arr.length; j++) {

            // Checking elements
            int temp = 0;
            if (arr[j] > arr[i]) {

                // Swapping
                temp = arr[i];
                arr[i] = arr[j];
                arr[j] = temp;
            }
        }

        // Printing sorted array elements
        //System.out.print(arr[i] + " ");
    }
    return arr;
}

public int [] reverseSort(int arr[]) {
    
    for (int i = 0; i < arr.length; i++) {

        // Inner nested loop pointing 1 index ahead
        for (int j = i + 1; j < arr.length; j++) {

            // Checking elements
            int temp = 0;
            if (arr[j] < arr[i]) {

                // Swapping
                temp = arr[i];
                arr[i] = arr[j];
                arr[j] = temp;
            }
        }

        // Printing sorted array elements
        //System.out.print(arr[i] + " ");
    }
    return arr;
}


public static void main(String[] args) {
    
    HighestLowestActivity2 obj1 = new HighestLowestActivity2();
    HighestLowestActivity2 obj2 = new HighestLowestActivity2();

    // Custom input array
    int arr[] = { 4, 0, 3, 56, 2, 32, 1 };
    
    int[] arr1 = new int[arr.length];
    int[] arr2 = new int[arr.length];
    arr1 = obj1.sort(arr);
    arr2 = obj2.reverseSort(arr);
    
    
    for(int i = 0; i< arr1.length; i++) {
        System.out.print(arr1[i] + " ");
        System.out.println();
    }       
    
    System.out.println();
    
    for(int i = 0; i< arr2.length; i++) {
        System.out.print(arr2[i] + " ");
        System.out.println();
    }
    
    System.out.println();
    
    System.out.println(Arrays.toString(obj1.sort(arr)));
    
    System.out.println(Arrays.toString(obj2.reverseSort(arr)));

}
}

内容的提问来源于stack exchange,提问作者user18963116

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 10:40:35