web-dev-qa-db-ja.com

Java Arrays.fill()

多次元配列を満たす方法は?

int[][] array = new int[4][6]; 
Arrays.fill(array, 0);

試してみましたが動作しません。

20
alphachap

For-eachを使用した提案を次に示します。

for (int[] row : array)
    Arrays.fill(row, 0);

あなたはそれが動作することを確認することができます

System.out.println(Arrays.deepToString(array));

補足:配列を作成するので、塗りつぶしの直前に、実際に塗りつぶしは必要ありません(本当にゼロが必要である限り)。 Javaは、すべての配列要素を対応するデフォルト値に初期化し、intの場合は0です:-)

29
aioobe

これを試して:

for(int i = 0; i < array.length; i++) {
    Arrays.fill(array[i], 0);
}

私はそれをテストしていませんが、うまくいくと思います。

13
Argote

配列は実際には配列の配列なので、各行をループして、行ごとに個別に塗りつぶすことができます。

2
duffymo

まず、0はint配列のデフォルト値であるため、何かを0で埋める必要はありません。

配列を本当に多次元にしたい場合は、ループが必要になります。

public static void fill(int[][] array, int element) {
    for(int[] subarray : array) {
        Arrays.fill(subarray, element);
    }
}

同じ要素で満たされた2D配列だけが必要で、後でサブ配列を変更したくない場合は、このトリックを使用できます。

public static int[][] create2DArray(int length, int subLength, int element) {
    int[] subArray = new int[subLength];
    Arrays.fill(subArray, element);
    int[][] array = new int[length][];
    Arrays.fill(array, subArray);
    return array;
}

これは、より高次元の配列でも同様に機能します。

1
Paŭlo Ebermann