Tips

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

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

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

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

問題

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

解答例1
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);
	}
}

間違い例

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);
	}
}

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


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

はじめてのJAVA 連載

Recent News

Recent Tips

Tag Search