Java | 配列操作・2次元配列:バグ修正問題集

Java Java
スポンサーリンク

では今回は、「配列操作」と「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

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