banner
指数爆炸

指数爆炸

我做了对饭 !
github
bilibili

如何在其他方法中修改 main 方法裡的陣列?

public class Demo1 {
    public static void main(String[] args) {
        int arr[] = {2, 3, 4};
        sort(arr);
        System.out.println(Arrays.toString(arr));
    }

    public static void sort(int arr[]) {
        int arr1[] = {0, 3, 4};
        arr = Arrays.copyOfRange(arr1, 0, arr1.length);
    }
}

Output: [2, 3, 4]

在這段程式碼中,我期望透過呼叫 sort 方法對 arr 進行修改,並將修改後的結果輸出。然而,輸出的結果仍然是原始的陣列 [2, 3, 4]。

這是因為在 Java 中,當你將陣列傳遞給 sort 方法時,實際上是將陣列的參考(記憶體位址)傳遞給了方法。在 sort 方法內部,你對 arr 進行了重新賦值,但這只是將區域變數 arr 指向了新的陣列 arr1,並不影響 main 方法中的原始陣列。

解決方法:#

  • 對該參考指向的陣列進行修改
public class Demo1 {
    public static void main(String[] args) {
        int arr[] = {2, 3, 4};
        sort(arr);
        System.out.println(Arrays.toString(arr));
    }

    public static void sort(int arr[]) {
        // 在sort方法中直接修改arr陣列
        arr[0] = 0;
        arr[1] = 3;
        arr[2] = 4;
    }
}
  • 將 sort 的回傳值改為 int [],然後在 main 方法中進行修改
public class Demo1 {
    public static void main(String[] args) {
        int arr[] = {2, 3, 4};
        arr = sort(arr);
        System.out.println(Arrays.toString(arr));
    }

    public static int[] sort(int arr[]) {
        int arr1[] = {0, 3, 4};
        return Arrays.copyOfRange(arr1, 0, arr1.length);
    }
}
載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。