-1

Strings の ArrayList をパラメーターとして取り、そこから偶数の長さのすべての文字列を削除するメソッドに取り組もうとしています。これは私がこれまでに持っているものです:

public void removeEvenLength(ArrayList<String> items) {
    for (String s : items) {
        if (s.length() % 2 == 0) items.remove(s);
    }
}

何らかの理由でこれが機能していません。要素を含む ArrayList で実行しようとすると、エラーが表示されます。誰かが理由を教えてもらえますか? 助けてくれてありがとう。

4

2 に答える 2

3

Listアイテムを削除して同時にループで実行することはできません。そのために使用iteratorします。

List<String> items = ....
Iterator<String> it = items.iterator();
while (it.hasNext()) {
   String s = it.next(); 
    if (s.length() % 2 == 0){
         it.remove();
     }

}
于 2013-11-03T18:46:40.253 に答える
1

長いイディオムを使用する必要があります。

for (Iterator<String> it = items.iterator(); it.hasNext();)
  if (it.next().length() % 2 == 0) it.remove();

理由:強化された forループは上記のようなコードにコンパイルされます。また、 を使用している間はIterator、 を呼び出す以外の方法で基になるリストを変更することはできませんIterator#remove。そのため、反復子は削除を認識します。

于 2013-11-03T18:47:55.697 に答える