gpt4 book ai didi

java - 对对象列表进行排序

转载 作者:行者123 更新时间:2023-12-01 07:06:22 26 4
gpt4 key购买 nike

我正在制作一个模拟纸牌游戏的程序。我有一个类 Card 代表一张扑克牌:

//suit types
public enum Suits{
SPADES,
CLUBS,
HEARTS,
DIAMONDS
}

//value types
public enum Values{
TWO,
THREE,
FOUR,
FIVE,
SIX,
SEVEN,
EIGHT,
NINE,
TEN,
JACK,
QUEEN,
KING,
ACE,
}

private Suits suit;
private Values value;

//Card constructor
public Card(Values value, Suits suit){
this.value = value;
this.suit = suit;
}

在我的游戏类中,我有一个玩家手牌,由 CardsList 表示:

public List<Card> playerHand = new ArrayList<Card>();

有没有一种方法可以根据我的枚举对玩家手牌进行排序?如果玩家的手牌是:

十,王牌,二,五

订购后将是:

二、五、十、ACE

我的条件是Ace总是很高,而Suit并不重要。我知道排序列表很简单,我只是不知道如何为基于 enum

Object 执行此操作

最佳答案

枚举具有默认顺序,即它们实现 Comparable因此,您可以对枚举列表进行排序或调用 ACE.compareTo( TEN )在一些Comparator 。请注意,枚举值的顺序是枚举类中定义的顺序(基于序数,请参阅下一段),即在您的情况下 TWO <THREE <FOUR等等

此外,枚举还有一个序数,即定义中枚举值的索引。在你的情况下TWO将会有序数 0, THREE序数 1 等

为了对卡片进行排序,您可以使用 Comparator (或实现 Comparable<Card> ),如下所示:

class CardComparator implements Comparator<Card> {
public int compare( Card lhs, Card rhs) {
//suit would be relevant otherwise you'd end up with spades 10, hearts 10, spades jack etc.
//thus sort by suit first to keep the cards of a suit together
int r = lhs.suit.compareTo( rhs.suit );

if( r == 0) { //same suit
r = lhs.value.compareTo( rhs.value );
}
return r;
}
}

关于java - 对对象列表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23136226/

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