Java 从ArrayList中删除元素
我正在尝试将“选择”元素从指针[1]复制到指针[0]。 我可以使用以下代码成功执行此操作:Java 从ArrayList中删除元素,java,arraylist,Java,Arraylist,我正在尝试将“选择”元素从指针[1]复制到指针[0]。 我可以使用以下代码成功执行此操作: for(Card card : hands[1].cards) { if (card.suit().ordinal() == 0){ hands[0].addSingleCard(card); //hands[1].removeSingleCard(card); } } 不幸的是
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方法能够在复制完每张“俱乐部”卡后将其从手中删除[1]
public void addSingleCard(Card card){
if(card!= null){
cards.add(card);
}
}
public void removeSingleCard(Card c){
if(c!= null){
cards.remove(c);
}
}
你知道为什么这不起作用吗?除了通过迭代器,你不能从正在迭代的集合中删除。因此,您可以使用:
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();
}
}
除了通过迭代器之外,不能从正在迭代的集合中删除。因此,您可以使用:
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();
}
}
我假设您得到一个ConcurrentModificationException,因为您在for循环中迭代时正在从集合中删除。
您应该使用迭代器。remove我假设您得到一个ConcurrentModificationException,因为您在for循环中迭代时正在从集合中删除。
你应该使用迭代器。删除Ah尼斯:这太棒了。这正是我想要达到的。非常感谢。我一定要记住这一点:DAh nice:这太棒了。这正是我想要达到的。非常感谢。我一定要记住这一点:d card.suit.ordinal==0测试是单向的。只需使用card.suit==suit.CLUBS。如果以不同的顺序定义西装,请使用枚举中的第0个元素。任何对Enum.ordinal的使用都会引起怀疑。card.suit.ordinal==0测试是不规则的。只需使用card.suit==suit.CLUBS。如果以不同的顺序定义西装,请使用枚举中的第0个元素。使用Enum.ordinal应引起怀疑。