DEV Community

TANIAOKA, Akihiro
TANIAOKA, Akihiro

Posted on

9章13

このJavaコードは、文字列のArrayListを作成し、いくつかの文字列を追加した後に、特定の文字列(この場合は"C")をリストから削除しようとしています。しかし、このコードには一般的な間違いが含まれており、それが答えEを正解にしています。以下はコードの説明と、なぜ答えがEになるのかを説明します。

import java.util.ArrayList; // ArrayListをインポート

public class Main {
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>(); // 新しいArrayListを作成
        list.add("A"); // "A"をリストに追加
        list.add("B"); // "B"をリストに追加
        list.add("C"); // "C"をリストに追加
        list.add("D"); // "D"をリストに追加
        list.add("E"); // "E"をリストに追加

        // リストを走査するfor-eachループ
        for (String str : list) {
            if ("C".equals(str)) {
                list.remove(str); // "C"が見つかればリストから削除
            }
        }

        // リストの内容を表示するfor-eachループ
        for (String str : list) {
            System.out.println(str); // リストの各要素を出力
        }
    }
}
Enter fullscreen mode Exit fullscreen mode

このコードの問題点は、for-eachループの内部でリストから要素を削除しようとしていることです。Javaのfor-eachループは、コレクションを走査している間にそのコレクションを変更することを許可していません。要素を削除しようとすると、ConcurrentModificationExceptionが発生し、プログラムがクラッシュします。

答えがE「実行時に例外がスローされる」である理由は、上記のループ中にリストから要素を削除しようとしているためです。正しい方法は、Iteratorを使用するか、削除する要素のインデックスを記録してループの外で削除することです。

このため、実行時にConcurrentModificationExceptionがスローされ、リストの内容は出力されません。

Top comments (0)