gpt4 book ai didi

java - 在遍历列表时按索引从列表中删除项目

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:27:31 26 4
gpt4 key购买 nike

public boolean isTwoPair() {
boolean isTwoPair = false;
Collections.sort(deck);
List<Card> cards = new LinkedList<Card>(deck);
System.out.println(cards);
for (int i = 0; i < cards.size()-1; i++) {
for (int j = i + 1; j < cards.size()-1; j++) {
if (deck.get(i).equals(deck.get(j))) {
cards.remove(i);
cards.remove(j);
System.out.println(cards);
}
}

}
return isTwoPair;

}

我认为我的问题出在我的 cards.remove() 上。当我删除一张卡时,下次删除该卡时,它会将其从更改列表中删除。有没有办法从列表中删除具有相同索引号的两个项目?

如果我必须删除索引 0,1 因为它们都是这样的对:

[Ace,Ace,Three,Four,Four]

代码像这样删除它(删除索引 0)

[Ace,Three,Four,Four]

不是从第一个列表中删除索引 1(Ace),而是从第二个列表中删除它

[Ace,Four,Four]

它从第三个列表中删除了索引 1。

这是我期待的

[Three,Four,Four]

在这一点上,我希望我的循环能够拾取并删除四和四

编辑:

    public boolean isTwoPair() {
boolean isTwoPair = false;
Collections.sort(deck);
List<Card> cards = new LinkedList<Card>(deck);
System.out.println(cards);
for (int cardOne = 0; cardOne < cards.size(); cardOne++) {
for (int cardTwo = cardOne + 1; cardTwo < cards.size(); cardTwo++) {
if (deck.get(cardOne).equals(deck.get(cardTwo))) {
cards.remove(cardOne);
cards.remove(cardTwo-1);
System.out.println(cards);
for(int cardThree = 0; cardThree < cards.size(); cardThree++){
for(int cardFour = cardThree+1; cardFour < cards.size(); cardFour++){
if(cards.get(cardThree).equals(cards.get(cardFour))){
cards.remove(cardThree);
cards.remove(cardFour-1);
System.out.println(cards);
isTwoPair = true;
}
}
}
}
}

}
return isTwoPair;

}

这就是我现在正在使用的,如果没有必要,我真的不想创建一个新变量,所以我决定不删除 Object

最佳答案

如果你知道j总是大于i(因为for循环),如果你先删除索引为i的元素然后您可以删除索引为 j - 1 的元素以获得预期的结果。

cards.remove(i);
cards.remove(j-1);

关于java - 在遍历列表时按索引从列表中删除项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20113721/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com