我有这个Java类:
class Card
{
private Suit suit;
private int rank;
}
(Suit
是一个枚举)
有四种套装,每种等级为1-9,四种套装有一种可能的等级0.每张卡片都存在未知但在所有卡片中的数量不变。我如何按照套装的顺序对牌组进行排序,并通过增加每套牌的等级?
答案 0 :(得分:3)
你需要
compareTo
函数,用于确定在排序顺序中此卡之前或之后是否应该使用另一张卡然后您可以在列表中使用Collections.sort。
答案 1 :(得分:2)
使Rank也是一个枚举,你可以这样处理一个排序的套牌:
for (Suit suit : Suit.values())
for (Rank rank : Rank.values())
deck.add(new Card(rank, suit));
答案 2 :(得分:2)
看看在枚举上实现Comparable。
答案 3 :(得分:1)
使其实现Comparable
接口。 Theres只需要编写一种方法。然后可以将它们相互比较,并且您有许多现有的排序选项,例如,如果您有数组,则为静态Arrays.sort
;如果有任何类型的Collections.sort
,则为Collection
(列表,矢量等)
除了在Card
上实施之外,您可能必须对Suit
执行相同操作,具体取决于其完成方式。
答案 4 :(得分:0)
这是卡类的一个例子。正如问题所述,诉讼将属于特定类别,而等级将是整数(在此示例中,我没有实现等级验证)。实现Comparable类允许Card类比较另一个Card类。这样就可以对一组/一组卡片进行排序。
public class Card implements Comparable<Card>{
private SUIT cardSuit;
private int cardRank;
public enum SUIT {SPADE, CLUB, HEART, DIAMOND};
public Card(int cardRank, SUIT cardSuit) {
this.cardSuit = cardSuit;
this.cardRank = cardRank;
}
/**
* Generates a random card
*/
public Card(){
this((int) (Math.random() * 9) , SUIT.values()[(int) (Math.random() * SUIT.values().length)]);
}
public String getSuit() {
return cardSuit.toString();
}
public int getRank() {
return cardRank;
}
@Override
public int compareTo(Card2 o) {
if (this.cardRank == o.cardRank) {
return this.cardSuit.compareTo(o.cardSuit);
} else {
return o.cardRank - this.cardRank;
}
}
}
答案 5 :(得分:0)
完成此任务的快速方法是Radix Sort。设置一系列卡片值列表,然后浏览您的卡片组,在遇到卡片时将每张卡片放入相应的列表中。然后将所有列表合并到一个部分排序的套牌中。现在做同样的事情,只有一系列西装列表。合并所有列表,你应该有一个排序的套牌。