今日も、Java Silver試験に向けた練習問題を解いて、知識を深めていきましょう。
問題
次のプログラムを実行するとどうなりますか? 正しい選択肢を選んでください。
import java.util.ArrayList;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<String> names = new ArrayList<>();
names.add("Alice");
names.add("Bob");
names.add("Charlie");
for (int i = 0; i < names.size(); i++) {
if (i % 2 == 0) {
names.remove(i);
}
}
System.out.println(names);
}
}
選択肢
- A. [Bob, Charlie]
- B. [Bob]
- C. [Alice, Charlie]
- D. 実行時エラー
答えと解説
回答を見る
答え
B. [Bob]
解説
基本説明:
このプログラムでは、names
というArrayList
に3つの文字列が追加されています。
その後、for
ループを使用して偶数インデックスの要素を削除しています。
インデックスは0から始まるので、「Alice」が削除され、次に「Charlie」が削除されます。
誤答理由
誤って「A. [Bob, Charlie]」を選ぶ理由:
削除操作後にループが期待したように動かずすべての要素が削除されないため誤答となります。
「Charlie」も削除の対象になることを見落としています。
つまずきポイント
このプログラムのつまずきやすいポイントは、要素削除時のインデックスの変化による予期しない動作です。
特に、ループ中にリストから要素を削除するとインデックス位置が変わるので、for
ループが意図通りに最後まで処理されないことがあります。
発展知識
安全にリストの要素を操作する方法として、Iterator
または拡張for
ループ(foreach
)を利用することが挙げられます。
これにより、要素の削除や追加を行っても処理が正常に行われるようにできます。
具体的には、Iterator
を使ってリストを巡回し、条件に基づいて削除するメソッドremove()
を活用する方法があり、これによってインデックスの移動を気にせずに処理が完成します。