Javaの三次元配列は「配列の配列の配列」です。つまり、一次元配列を三重にネストした構造になっています。Arrays.fill は一次元配列専用なので、三次元配列を部分的に初期化する場合は 二重・三重のループを組み合わせて、対象の範囲を指定して埋めるのが基本です。
基本の考え方
三次元配列の添え字は [x][y][z] のように3つ並びます。
int[][][] cube = new int[3][3][3]; // 3×3×3の三次元配列
Java- cube[0] → 二次元配列(3×3)
- cube[0][1] → 一次元配列(長さ3)
- cube[0][1][2] → 要素(int)
例①:特定の「層」だけ初期化
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
int[][][] cube = new int[3][3][3];
// 1層目(添え字0の二次元配列)を全部5に
for (int i = 0; i < cube[0].length; i++) {
Arrays.fill(cube[0][i], 5);
}
System.out.println(Arrays.deepToString(cube));
}
}
Java出力イメージ
[[[5, 5, 5], [5, 5, 5], [5, 5, 5]],
[[0, 0, 0], [0, 0, 0], [0, 0, 0]],
[[0, 0, 0], [0, 0, 0], [0, 0, 0]]]
例②:特定の「行」だけ初期化
int[][][] cube = new int[3][3][3];
// 2層目(添え字1)の1行目(添え字0)を全部9に
Arrays.fill(cube[1][0], 9);
Java結果
cube[1][0] → [9, 9, 9]
例③:範囲指定で部分的に初期化
int[][][] cube = new int[3][3][3];
// 3層目(添え字2)の2行目(添え字1)の添え字1~2を7に
Arrays.fill(cube[2][1], 1, 3, 7);
Java結果
cube[2][1] → [0, 7, 7]
例④:複数層をまとめて初期化
int[][][] cube = new int[3][3][3];
// 先頭2層を全部-1に
for (int layer = 0; layer < 2; layer++) {
for (int row = 0; row < cube[layer].length; row++) {
Arrays.fill(cube[layer][row], -1);
}
}
Java出力イメージ
[[[-1,-1,-1], [-1,-1,-1], [-1,-1,-1]],
[[-1,-1,-1], [-1,-1,-1], [-1,-1,-1]],
[[0,0,0], [0,0,0], [0,0,0]]]
✅ まとめ
- 三次元配列は「層 → 行 → 列」と分けて考える
Arrays.fillは一次元配列専用なので、層や行を選んでfillする- 部分的に埋めたいときは
Arrays.fill(配列, start, end, 値)を使う - 複数層をまとめて処理するなら for文を組み合わせる
