では今回は、「多次元配列+ArrayList版のバグ修正問題」20問 を紹介します。
配列と ArrayList を混ぜた問題で、初心者〜中級者向けに 間違いを見つけて修正する形式 にしています。
問題 1
ArrayList<int[]> list = new ArrayList<>();
list.add(new int[]{1,2});
System.out.println(list.get(0)[2]);
Java❌ 間違い
配列の長さは2 → index 2 は存在しない
✅ 修正
System.out.println(list.get(0)[1]);
Java問題 2
ArrayList<String[]> data = new ArrayList<>();
data.add(new String[]{"A","B"});
System.out.println(Arrays.toString(data.get(0)[1]));
Java❌ 間違い
data.get(0)[1] は String → 配列ではない
✅ 修正
System.out.println(data.get(0)[1]);
Java問題 3
ArrayList<int[]> list = new ArrayList<>();
list.get(0)[0] = 10;
Java❌ 間違い
list が空 → get(0) は IndexOutOfBounds
✅ 修正
list.add(new int[1]);
list.get(0)[0] = 10;
Java問題 4
ArrayList<int[]> list = new ArrayList<>();
list.add(new int[]{1,2});
System.out.println(Arrays.deepToString(list.toArray()));
Java❌ 間違い
toArray() は Object[] → deepToString では中身の int[] は展開されない
✅ 修正
for(int[] arr : list){
System.out.println(Arrays.toString(arr));
}
Java問題 5
ArrayList<int[]> list = new ArrayList<>();
int[] arr = new int[3];
list.add(arr);
arr[3] = 5;
Java❌ 間違い
配列の範囲外アクセス
✅ 修正
arr[2] = 5;
Java問題 6
ArrayList<int[]> list = new ArrayList<>(3);
System.out.println(list.get(0));
Java❌ 間違い
ArrayList の容量 3 は空リスト → get(0) はエラー
✅ 修正
list.add(new int[]{0});
System.out.println(list.get(0)[0]);
Java問題 7
ArrayList<int[]> list = new ArrayList<>();
list.add(new int[2]);
System.out.println(list.get(0).length());
Java❌ 間違い
配列の長さはプロパティ → メソッドではない
✅ 修正
System.out.println(list.get(0).length);
Java問題 8
ArrayList<int[]> list = new ArrayList<>();
list.add(new int[]{1,2});
for(int[] a : list){
System.out.println(a);
}
Java❌ 間違い
配列をそのまま println → アドレスが表示される
✅ 修正
for(int[] a : list){
System.out.println(Arrays.toString(a));
}
Java問題 9
ArrayList<String[]> data = new ArrayList<>();
data.add(new String[]{"A","B"});
System.out.println(Arrays.toString(data.toArray()));
Java❌ 間違い
toArray() は Object[] → 子配列の中身は表示されない
✅ 修正
for(String[] arr : data){
System.out.println(Arrays.toString(arr));
}
Java問題 10
ArrayList<int[]> list = new ArrayList<>();
list.add(new int[]{1,2});
list.get(1)[0] = 5;
Java❌ 間違い
get(1) → IndexOutOfBounds(要素は1個のみ)
✅ 修正
list.add(new int[1]);
list.get(1)[0] = 5;
問題 11
ArrayList<int[]> list = new ArrayList<>();
int[] arr = null;
list.add(arr);
System.out.println(list.get(0)[0]);
Java❌ 間違い
arr が null → get(0)[0] で NullPointerException
✅ 修正
arr = new int[1];
list.add(arr);
System.out.println(list.get(0)[0]);
Java問題 12
ArrayList<int[]> list = new ArrayList<>();
list.add(new int[]{1,2});
for(int[] a : list){
for(int i=0;i<=a.length;i++){
System.out.println(a[i]);
}
}
Java❌ 間違い
i <= a.length → 範囲外アクセス
✅ 修正
for(int i=0;i<a.length;i++){
System.out.println(a[i]);
}
Java問題 13
ArrayList<int[]> list = new ArrayList<>();
list.add(new int[2]);
list.get(0)[2] = 5;
Java❌ 間違い
配列の index 2 は存在しない
✅ 修正
list.get(0)[1] = 5;
Java問題 14
ArrayList<int[]> list = new ArrayList<>();
int[] arr = new int[3];
list.add(arr);
arr = new int[2];
System.out.println(list.get(0)[2]);
Java❌ 間違い
list に格納されたのは最初の arr → 要素 2 までアクセス可能
✅ 修正
アクセスは arr ではなく list の最初の配列を使う
System.out.println(list.get(0)[2]);
Java(ここは注意:新しい arr は list に追加していない)
問題 15
ArrayList<int[]> list = new ArrayList<>();
list.add(new int[]{1,2});
System.out.println(Arrays.deepToString(list.get(0)));
Java❌ 間違い
get(0) は int[] → deepToString は不要
✅ 修正
System.out.println(Arrays.toString(list.get(0)));
Java問題 16
ArrayList<int[]> list = new ArrayList<>();
list.add(new int[]{1,2});
list.remove(1);
Java❌ 間違い
remove(1) → IndexOutOfBounds(要素は1個のみ)
✅ 修正
list.remove(0);
Java問題 17
ArrayList<int[]> list = new ArrayList<>();
list.add(new int[]{1,2});
System.out.println(list.get(0).length());
Java❌ 間違い
配列の length はプロパティ → メソッドではない
✅ 修正
System.out.println(list.get(0).length);
Java問題 18
ArrayList<int[]> list = new ArrayList<>();
for(int[] a : list){
a[0] = 1;
}
Java❌ 間違い
list が空 → ループ実行されないが意図せず初期化なしのまま
✅ 修正
list.add(new int[1]);
for(int[] a : list){
a[0] = 1;
}
Java問題 19
ArrayList<int[]> list = new ArrayList<>();
list.add(null);
System.out.println(list.get(0)[0]);
Java❌ 間違い
null → NullPointerException
✅ 修正
list.set(0,new int[1]);
System.out.println(list.get(0)[0]);
Java問題 20
ArrayList<int[]> list = new ArrayList<>();
list.add(new int[]{1,2});
System.out.println(list);
Java❌ 間違い
println(list) → Object[] 参照表示になる
✅ 修正
for(int[] a : list){
System.out.println(Arrays.toString(a));
}
Java