1

'select'要素をhands[1]からhands[0]にコピーしようとしています。私はこのコードでこれをうまく行うことができます:

       for(Card card : hands[1].cards) {
          if (card.suit().ordinal() == 0){
             hands[0].addSingleCard(card);
             //hands[1].removeSingleCard(card);
             }
       }

残念ながら、removeSingleCardメソッドは期待どおりに機能しません。コメントアウトすると、for-eachループはすべての「クラブ」カードをhands[1]からhands[0]に正常にコピーします。removeSingleCardメソッドが、コピーされた後、hands[1]から各「Club」カードを削除することを期待していました。

       public void addSingleCard(Card card){
           if(card!= null){
             cards.add(card);
           }
       }

       public void removeSingleCard(Card c){
           if(c!= null){
             cards.remove(c);
           }
       }

これが機能しない理由はありますか?

4

2 に答える 2

6

イテレータを介する場合を除いて、反復しているコレクションから削除することはできません。したがって、次を使用できます。

for (Iterator<Card> iterator = hands[1].cards.iterator();
     iterator.hasNext(); ) {
    Card card = iterator.next();
    if (card.suit().ordinal() == 0) {
        hands[0].addSingleCard(card); // Or hands[0].cards.add(card);
        iterator.remove();
    }
}
于 2012-11-17T13:49:50.180 に答える
2

ループConcurrentModificationExceptionで反復しているときにコレクションから削除しているので、を取得すると思います。 あなたは使用する必要がありますfor
iterator.remove

于 2012-11-17T13:50:07.310 に答える