1

我正在尝试将“选择”元素从手 [1] 复制到手 [0]。我可以用这段代码成功地做到这一点:

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

不幸的是,我的 removeSingleCard 方法没有按我的预期工作。将其注释掉后,for-each 循环成功地将所有“俱乐部”牌从 hand[1] 复制到 hand[0]。我希望 removeSingleCard 方法会在复制后从手 [1] 中删除每张“俱乐部”卡。

       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

我假设你得到 aConcurrentModificationException因为你在for循环中迭代时从集合中删除。
你应该使用iterator.remove

于 2012-11-17T13:50:07.310 回答