Tips

【Java】プログラム作成練習問題47

【Java】プログラム作成練習問題47

プログラム作成練習問題47回となります。

※この出題形式に関しては答えは1つではありません。
解答例はできるだけ複数載せるつもりですが、問題文の要件を満たしていれば正解として下さい。

問題

ArrayListに以下の文字列を格納し、cで始まる文字列だけ削除するプログラム
api、android、binary、class、cache、domain、database

解答例1
[java] import java.util.ArrayList;

public class Excercise_047 {
public static void main(String[] args) {
ArrayList<String> wordList = new ArrayList<>();
wordList.add("api");
wordList.add("android");
wordList.add("binary");
wordList.add("class");
wordList.add("cache");
wordList.add("domain");
wordList.add("database");

for(int i = 0; i < wordList.size(); i++) {
String str = wordList.get(i);
if(str.charAt(0) == ‘c’) {
wordList.remove(i);
i–;
}
}

System.out.println(wordList);
}
}
[/java]


間違い例

[java] public class Excercise_047 {
public static void main(String[] args) {
ArrayList<String> wordList = new ArrayList<>();
wordList.add("api");
wordList.add("android");
wordList.add("binary");
wordList.add("class");
wordList.add("cache");
wordList.add("domain");
wordList.add("database");

for(int i = 0; i < wordList.size(); i++) {
String str = wordList.get(i);
if(str.charAt(0) == ‘c’) {
wordList.remove(i);
}
}

System.out.println(wordList);
}
}
[/java]

解答例1と比較すると、16、17行目の間にi–がありません。
この場合、cacheが出力されてしまいます。
removeメソッドで要素を削除するとインデックスがズレるのが原因です。
インデックス4のclassを削除すると、cacheがインデックス4になります。
しかしfor文では次のインデックス5を見にいくのでcacheが削除されません。


新連載はじまりました!新Java基礎 連載リンク

はじめてのJAVA 連載

Recent News

Recent Tips

Tag Search