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);
    }
}

出力結果:[2, 3, 4]

このコードでは、sort メソッドを呼び出して arr を変更し、変更後の結果を出力することを期待しています。しかし、出力結果は依然として元の配列 [2, 3, 4] です。

これは Java では、配列を sort メソッドに渡すと、実際には配列の参照(メモリアドレス)がメソッドに渡されるためです。sort メソッドの内部では、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);
    }
}
読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。