Java | 「配列+ArrayList+多次元配列+toString / deepToString」総合バグ修正問題集

Java
スポンサーリンク

総合バグ修正問題 31~50(応用・発展)

問題 31:ジャグ配列のサイズ未設定

int[][] arr = new int[3][];
arr[0][0] = 10;
Java

❌ 間違い

arr[0] が null → NullPointerException

✅ 修正

arr[0] = new int[1];
arr[0][0] = 10;
Java

問題 32:ジャグ配列の長さを固定で回す

int[][] arr = {{1,2},{3,4,5}};
for(int i=0;i<2;i++){
    for(int j=0;j<3;j++){
        System.out.println(arr[i][j]);
    }
}
Java

❌ 間違い

arr[0] に index 2 は存在しない → IndexOutOfBounds

✅ 修正

for(int i=0;i<arr.length;i++){
    for(int j=0;j<arr[i].length;j++){
        System.out.println(arr[i][j]);
    }
}
Java

問題 33:3次元配列の表示ミス

int[][][] cube = new int[2][2][2];
System.out.println(Arrays.toString(cube));
Java

❌ 間違い

3次元配列 → deepToString を使う必要あり

✅ 修正

System.out.println(Arrays.deepToString(cube));
Java

問題 34:3次元配列の範囲外アクセス

int[][][] cube = new int[2][2][2];
cube[1][2][0] = 5;
Java

❌ 間違い

第2次元のインデックス 2 → 範囲外

✅ 修正

cube[1][1][0] = 5;
Java

問題 35:ArrayList<2D配列> の null 代入ミス

ArrayList<int[][]> list = new ArrayList<>();
list.add(new int[2][2]);
list.add(null);
System.out.println(Arrays.deepToString(list.get(1)));
Java

❌ 間違い

null を deepToString に渡すと NullPointerException

✅ 修正

list.set(1, new int[1][1]);
System.out.println(Arrays.deepToString(list.get(1)));
Java

問題 36:ArrayList の初期容量の誤解

ArrayList<int[]> list = new ArrayList<>(10);
list.get(0)[0] = 1;
Java

❌ 間違い

容量 10 は「空のまま10入る」だけ → get(0) はできない

✅ 修正

list.add(new int[1]);
list.get(0)[0] = 1;
Java

問題 37:ArrayList<多次元配列> + toArray の落とし穴

ArrayList<int[][]> list = new ArrayList<>();
list.add(new int[][]{{1,2},{3,4}});
System.out.println(Arrays.deepToString((int[][])list.toArray()[0]));
Java

❌ 間違い

toArray() の戻り値は Object[]
→ (int[][]) ではなく (int[][]) ではキャスト不可

✅ 修正

System.out.println(Arrays.deepToString(list.get(0)));
Java

問題 38:多次元配列の shallow copy ミス

int[][] arr = {{1,2},{3,4}};
int[][] copy = arr.clone();
copy[0][0] = 99;
System.out.println(arr[0][0]);
Java

❌ 間違い

clone() は shallow copy → 内部配列は共有される
→ arr[0][0] も 99 になる

✅ 修正

深いコピーをする

int[][] arr = {{1,2},{3,4}};
int[][] copy = new int[arr.length][];
for(int i=0;i<arr.length;i++){
    copy[i] = arr[i].clone();
}
Java

問題 39:3次元配列の shallow copy ミス

int[][][] cube = {{{1},{2}},{{3},{4}}};
int[][][] copy = cube.clone();
copy[0][0][0] = 99;
System.out.println(cube[0][0][0]);
Java

❌ 間違い

やはり shallow copy → 最深部までコピーされない

✅ 修正(deep copy)

int[][][] copy = new int[cube.length][][];
for(int i=0;i<cube.length;i++){
    copy[i] = new int[cube[i].length][];
    for(int j=0;j<cube[i].length;j++){
        copy[i][j] = cube[i][j].clone();
    }
}
Java

問題 40:ArrayList<配列> の shallow copy ミス

ArrayList<int[]> list = new ArrayList<>();
list.add(new int[]{1,2});
ArrayList<int[]> copy = (ArrayList<int[]>) list.clone();
copy.get(0)[0] = 99;
System.out.println(list.get(0)[0]);
Java

❌ 間違い

clone() は shallow → 配列は共有される

✅ 修正

ArrayList<int[]> copy = new ArrayList<>();
for(int[] a : list){
    copy.add(a.clone());
}
Java

問題 41:3次元 ArrayList + 表示ミス

ArrayList<int[][][]> list = new ArrayList<>();
list.add(new int[1][1][1]);
System.out.println(Arrays.toString(list.get(0)));
Java

❌ 間違い

3次元配列の表示に toString は使えない

✅ 修正

System.out.println(Arrays.deepToString(list.get(0)));
Java

問題 42:配列の追加位置を勘違い

int[] a = {1,2};
int[] b = {3,4};
int[] c = new int[a.length + b.length];

for(int i=0;i<=a.length;i++){
    c[i] = a[i];
}
Java

❌ 間違い

i <= a.length → 範囲外アクセス
IndexOutOfBounds

✅ 修正

for(int i=0;i<a.length;i++){
    c[i] = a[i];
}
Java

問題 43:多次元配列の結合ミス

int[][] a = {{1,2}};
int[][] b = {{3,4}};
int[][] c = new int[a.length + b.length][];

for(int i=0;i<=a.length;i++){
    c[i] = a[i];
}
Java

同じく <= ミス

✅ 修正

for(int i=0;i<a.length;i++){
    c[i] = a[i];
}
Java

問題 44:配列コピー時のサイズミス

int[] src = {1,2,3};
int[] dst = new int[2];
System.arraycopy(src,0,dst,0,3);
Java

dst が 2 → 3 要素コピーは無理

✅ 修正

System.arraycopy(src,0,dst,0,2);
Java

問題 45:ArrayList の remove ミス

ArrayList<int[]> list = new ArrayList<>();
list.add(new int[]{1,2});
list.remove(new int[]{1,2});
Java

remove(obj) は参照一致
→ 同じ内容でも別配列なので削除されない

よくある初学者バグ

✅ 修正

list.remove(0);
Java

問題 46:深い階層の ArrayList を誤って表示

ArrayList<ArrayList<int[]>> data = new ArrayList<>();
ArrayList<int[]> inner = new ArrayList<>();
inner.add(new int[]{1,2});
data.add(inner);

System.out.println(data);
Java

配列の中身が表示されない
int[] → アドレス表示

✅ 修正

for(ArrayList<int[]> list : data){
    for(int[] a : list){
        System.out.println(Arrays.toString(a));
    }
}
Java

問題 47:2D ArrayList の null 行ミス

ArrayList<ArrayList<Integer>> grid = new ArrayList<>();
grid.add(null);
grid.get(0).add(10);
Java

grid.get(0) が null → NullPointerException

✅ 修正

grid.set(0, new ArrayList<>());
grid.get(0).add(10);
Java

問題 48:多次元 ArrayList の要素アクセスミス

ArrayList<ArrayList<int[]>> data = new ArrayList<>();
data.add(new ArrayList<>());
data.get(0).add(new int[]{1,2});
System.out.println(data.get(1).get(0)[0]);
Java

data.get(1) は存在しない

✅ 修正

System.out.println(data.get(0).get(0)[0]);
Java

問題 49:ArrayList + 2D 配列の書き換えミス

ArrayList<int[][]> list = new ArrayList<>();
int[][] arr = {{1,2},{3,4}};
list.add(arr);
list.get(0)[0][2] = 99;
Java

arr[0] は長さ 2 → index 2 はなし

✅ 修正

list.get(0)[0][1] = 99;
Java

問題 50:3D ArrayList の深すぎる null ミス

ArrayList<int[][][]> list = new ArrayList<>();
int[][][] arr = new int[1][1][];
arr[0][0][0] = 10;
Java

❌ 間違い

arr[0][0] が null → さらにその 0 番目アクセス → NullPointerException

✅ 修正

arr[0][0] = new int[1];
arr[0][0][0] = 10;
Java

Java
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました