では今回は、「配列操作」と「2次元配列」版のバグ修正問題(初心者〜中級向け)」 を 20問 用意。
各問題は 間違いを見つけて修正する形式 です。
問題 1(1次元配列操作)
int[] arr = {10, 20, 30};
arr[3] = 40;
Java❌ 間違い
配列のインデックス 3 は存在しない。
✅ 修正
arr[2] = 40; // または配列サイズを増やす
Java問題 2(1次元配列操作)
int[] a = {1,2,3};
System.out.println(a[3]);
Java❌ 間違い
範囲外アクセス → ArrayIndexOutOfBoundsException
✅ 修正
System.out.println(a[2]);
Java問題 3(1次元配列初期化)
int[] numbers;
numbers[0] = 10;
Java❌ 間違い
配列がまだ初期化されていない。
✅ 修正
int[] numbers = new int[3];
numbers[0] = 10;
Java問題 4(配列長さ取得)
int[] a = {1,2,3};
System.out.println(a.length());
Java❌ 間違い
配列の長さはプロパティで、メソッドではない。
✅ 修正
System.out.println(a.length);
Java問題 5(配列コピー)
int[] src = {1,2,3};
int[] dest = new int[3];
System.arraycopy(src, 0, dest, 0, 4);
Java❌ 間違い
コピー長 4 は配列サイズを超える。
✅ 修正
System.arraycopy(src, 0, dest, 0, src.length);
Java問題 6(配列要素の合計)
int[] nums = {1,2,3};
int sum;
for(int i=0; i<nums.length; i++){
sum += nums[i];
}
Java❌ 間違い
sum が初期化されていない。
✅ 修正
int sum = 0;
for(int i=0; i<nums.length; i++){
sum += nums[i];
}
Java問題 7(2次元配列代入)
int[][] table = new int[2][2];
table[1][2] = 5;
Java❌ 間違い
table[1][2] は存在しない(列インデックス 0,1 のみ)。
✅ 修正
table[1][1] = 5;
Java問題 8(2次元配列ループ)
int[][] matrix = {{1,2},{3,4}};
for(int i=0; i<=matrix.length; i++){
for(int j=0; j<matrix[i].length; j++){
System.out.println(matrix[i][j]);
}
}
Java❌ 間違い
i <= matrix.length → 範囲外アクセス
✅ 修正
for(int i=0; i<matrix.length; i++){
for(int j=0; j<matrix[i].length; j++){
System.out.println(matrix[i][j]);
}
}
Java問題 9(2次元配列初期化)
int[][] m;
m[0] = new int[2];
Java❌ 間違い
m が null のままアクセスしている。
✅ 修正
int[][] m = new int[1][];
m[0] = new int[2];
Java問題 10(2次元配列表示)
int[][] arr = {{1,2},{3,4}};
System.out.println(Arrays.toString(arr));
Java❌ 間違い
多次元配列を toString → 子配列は参照表示になる。
✅ 修正
System.out.println(Arrays.deepToString(arr));
Java問題 11(2次元配列代入)
int[][] grid = new int[3][3];
grid[3][0] = 10;
Java❌ 間違い
行インデックス 3 は存在しない
✅ 修正
grid[2][0] = 10;
Java問題 12(2次元配列ループ)
int[][] arr = {{1,2},{3,4,5}};
for(int i=0;i<arr.length;i++){
for(int j=0;j<2;j++){
System.out.println(arr[i][j]);
}
}
Java❌ 間違い
arr[1][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問題 13(配列初期化)
int[][] arr = new int[2][];
arr[1][0] = 5;
Java❌ 間違い
arr[1] がまだ null なのでアクセスできない。
✅ 修正
arr[1] = new int[1];
arr[1][0] = 5;
Java問題 14(配列代入)
int[] a = {1,2,3};
a[0] = a[3];
Java❌ 間違い
a[3] は存在しない
✅ 修正
a[0] = a[2];
Java問題 15(多次元配列コピー)
int[][] src = {{1,2},{3,4}};
int[][] dest = new int[2][2];
System.arraycopy(src,0,dest,0,4);
Java❌ 間違い
2次元配列を System.arraycopy で一気にコピーはできない(浅いコピーになる場合あり)
✅ 修正(簡単な方法)
for(int i=0;i<src.length;i++){
System.arraycopy(src[i],0,dest[i],0,src[i].length);
}
Java問題 16(1次元配列表示)
int[] arr = {1,2,3};
System.out.println(arr[3]);
Java❌ 間違い
範囲外アクセス → IndexOutOfBounds
✅ 修正
System.out.println(arr[2]);
Java問題 17(2次元配列表示)
int[][] arr = {{1,2},{3,4}};
System.out.println(arr[2][0]);
Java❌ 間違い
行インデックス 2 は存在しない
✅ 修正
System.out.println(arr[1][0]);
Java問題 18(ジャグ配列初期化)
int[][] arr = new int[2][];
arr[0][0] = 1;
Java❌ 間違い
arr[0] が null
✅ 修正
arr[0] = new int[1];
arr[0][0] = 1;
Java問題 19(2次元配列ループ)
int[][] arr = {{1,2},{3,4,5}};
for(int i=0;i<arr.length;i++){
for(int j=0;j<3;j++){
System.out.println(arr[i][j]);
}
}
Java❌ 間違い
arr[0] の長さは2 → arr[0][2] は範囲外
✅ 修正
for(int i=0;i<arr.length;i++){
for(int j=0;j<arr[i].length;j++){
System.out.println(arr[i][j]);
}
}
Java問題 20(2次元配列表示)
int[][] arr = {{1,2},{3,4}};
System.out.println(Arrays.toString(arr[0][1]));
Java❌ 間違い
arr[0][1] は int → 配列ではない
✅ 修正
System.out.println(arr[0][1]); // 値を表示
Java