DEV Community

TANIAOKA, Akihiro
TANIAOKA, Akihiro

Posted on

9章9

このJavaのコードはArrayListに対する操作を行っており、その動作を理解するにはArrayListの動作原理を知る必要があります。ArrayListは0から始まるインデックスを持ち、add(index, element)メソッドを使うと指定したインデックス位置に要素を挿入することができます。しかし、指定するインデックスがリストの現在のサイズを超えている場合はIndexOutOfBoundsExceptionを投げます。

コードを見ると、まず"A"がリストに追加され、その後にlist.add(2, "B");が呼び出されています。この時点でリストのサイズは1しかないので("A"のみが含まれている)、インデックス2の位置に"B"を挿入することはできません。そのため、実行時にIndexOutOfBoundsExceptionが発生し、選択肢Eが正しい答えとなります。

実際のコードにコメントを追加して説明すると以下のようになります。

import java.util.ArrayList;

public class Main {
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>(); // 新しいArrayListを作成
        list.add("A"); // リストに"A"を追加 -> ["A"]
        list.add(2, "B"); // インデックス2に"B"を挿入しようとするが、
                          // リストのサイズは1なのでIndexOutOfBoundsExceptionが発生する
        list.add("C"); // このコード行は実行されない
        list.add("D"); // このコード行は実行されない
        for (String str : list) { // リストのすべての文字列を出力
            System.out.print(str); // このコード行は実行されない
        }
    }
}
Enter fullscreen mode Exit fullscreen mode

ここで、list.add(2, "B");は、リストのサイズが2未満の時点で呼び出されているため、IndexOutOfBoundsExceptionが発生し、それ以降のコードは実行されません。そのため、プログラムはエラーを出力して終了します。

追記

はい、list.add(2, "B");list.add(1, "B"); に変更することで、IndexOutOfBoundsException を発生させずにコードを正常に実行することができます。

list.add(1, "B"); に変更すると、"B" がリストのインデックス1に挿入されます。インデックスは0から始まるので、この操作は"A"が追加された後の位置、つまりリストの最初の要素"A"の後に"B"を挿入することになります。

修正後のコードは以下のようになります:

import java.util.ArrayList;

public class Main {
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>(); // 新しいArrayListを作成
        list.add("A"); // リストに"A"を追加 -> ["A"]
        list.add(1, "B"); // インデックス1に"B"を挿入 -> ["A", "B"]
        list.add("C"); // リストの末尾に"C"を追加 -> ["A", "B", "C"]
        list.add("D"); // リストの末尾に"D"を追加 -> ["A", "B", "C", "D"]
        for (String str : list) { // リストのすべての文字列を出力
            System.out.print(str); // 出力される文字列は "ABCD"
        }
    }
}
Enter fullscreen mode Exit fullscreen mode

この修正により、コードはArrayListの各要素を順に出力して、結果として"ABCD"を表示するようになります。

Top comments (0)