我有一张班级卡和一张班级手牌。我还有两个编号:
套装,包含值:钻石、棍棒、心脏、黑桃
和等级,包含值:二、三、四、五、六、七、八、九、十、杰克、皇后、国王、王牌
Hand类有一个链接到Card类的arraylist。我想重写Hand类中的compareto()方法,以便按照秩值对卡片对象进行排序按此顺序:
二、三、四、五、六、七、八、九、十、杰克、女王、国王、王牌。
如果有两张牌具有相同的等级值,则应按照以下顺序按套装值排序:
钻石,俱乐部,心脏,铲子,按升序排列。
例如,如果一手牌中有牌:黑桃二、钻石二、心牌、梅花九。那么当我打电话给收款人的时候。sort()在包含卡片的arraylist上,应按以下顺序打印:菱形2、黑桃2、梅花9、心形A。
compareto()方法中的代码目前不起作用。
public class Card implements Comparable<Object> {
private Suit suit;
private Rank rank;
public Card(Suit suit, Rank rank) {
this.suit = suit;
this.rank = rank;
}
public Suit getSuit() {
return suit;
}
public void setSuit(Suit suit) {
this.suit = suit;
}
public Rank getRank() {
return rank;
}
public void setRank(Rank rank) {
this.rank = rank;
}
@Override
public String toString() {
return getSuit() + " " + getRank();
}
@Override
public int compareTo(Object otherObject) {
Card other = (Card) otherObject;
if (rank.TWO < other.rank.THREE) {
return -1;
}
if (rank.TWO > other.rank.THREE) {
return 1;
}
return 0;
}
}
public class Hand {
private ArrayList<Card> cards = new ArrayList<>();
public boolean add(Card c) {
if (linearSearchList(cards, c) == false) { // if the card do NOT exist in the arraylist
cards.add(c);
return true;
}
return false;
}
public boolean remove(Card c) {
if (linearSearchList(cards, c) == true) { // if the card already in the arraylist
cards.remove(c);
return true;
}
return false;
}
public ArrayList<Card> getCards() {
return new ArrayList<>(cards);
}
public static boolean linearSearchList(ArrayList<Card> cardsList, Card c) {
boolean found = false;
int i = 0;
while (!found && i < cardsList.size()) {
if (cardsList.get(i).equals(c)) {
found = true;
} else {
i++;
}
}
if (found) {
return true;
} else {
return false;
}
}
@Override
public String toString() {
Collections.sort(cards);
return cards.toString();
}
}
public enum Suit {
DIAMOND, CLUB, HEART, SPADE;
}
public enum Rank {
TWO, THREE, FOUR, FIVE, SIX, SEVEN, EIGHT, NINE, TEN, JACK, QUEEN, KING, ACE;
}
public class MainApp {
public static void main(String[] args) {
Card c1 = new Card(Suit.DIAMOND, Rank.QUEEN);
Card c2 = new Card(Suit.HEART, Rank.EIGHT);
Card c3 = new Card(Suit.DIAMOND, Rank.KING);
Card c4 = new Card(Suit.CLUB, Rank.TWO);
Card c5 = new Card(Suit.SPADE, Rank.ACE);
Hand hand1 = new Hand();
hand1.add(c1);
hand1.add(c2);
hand1.add(c3);
hand1.add(c4);
hand1.add(c5);
Collections.sort(hand1.getCards());
for (Card card : hand1.getCards()) {
System.out.println(card);
}
}
}
首先,让你的类实现可比
public class Card implements Comparable<Card> {
您甚至没有为
compareTo
提供正确的正文,因此它不起作用。稍后请不要在这里抛出随机代码。
@Override
public int compareTo(Card otherCard) {
if (this.rank == otherCard.rank) {
return this.suite.compareTo(otherCard.suite);
}
return this.rank.compareTo(otherCard.rank);
}
请注意,此实现取决于默认枚举顺序,这要求您指定一、二、三。。。按enum和DIAMON的顺序排列。。。在套件中
如果要为枚举自定义比较,则必须单独实现它。
问题内容: 我有一个对象数组: 如何获得按属性名称升序排列的数组? 我尝试这样做:,但这不起作用。 请帮我! 编辑:数组可以包含两个以上的对象!它可以包含数百个。 编辑: 为什么在“重复的”问题问了两年之前,这个问题为什么被标记为重复? 问题答案:
问题内容: 如何枚举JavaScript对象的属性? 我实际上想列出所有已定义的变量及其值,但是我了解到定义一个变量实际上会创建window对象的属性。 问题答案: 很简单: 现在,您将无法以这种方式获取私有变量,因为它们不可用。 编辑:是正确的,除非您使用该方法,否则您将获得继承的属性- 但是,我不知道为什么任何熟悉面向对象编程的人都期望得到更少的东西!通常,提起此问题的人会受到道格拉斯·克罗克
问题内容: 我有一个如下的JavaScript对象: 现在我想通过所有回路元素(,,…),并得到他们的键和值。我怎样才能做到这一点? 我可以根据需要修改JavaScript对象。我的最终目标是遍历一些键值对,如果可能的话,我想避免使用。 问题答案: 您可以使用其他人所示的循环。但是,您还必须确保获得的键是对象的实际属性,而不是来自原型。 这是代码段: 用Object.keys()替代: 请注意,使
问题内容: 我已经寻找了一段时间,想要一种对JSON对象进行排序的方法,如下所示: 并按字母顺序按值“ COMMERCIALNAME_E”得到: 我找不到任何可以做到这一点的代码。谁能给我些帮助? 问题答案: 将这些JSON解析为“对象集合”,然后使用比较器通过您喜欢的字段对其进行排序。 使用GSON将其解析为对象集合 例: 如果要从Object创建JSON。
我用的是Java 8号。我有一份汽车物品清单。我想按特定的顺序对它们进行排序。 每个汽车对象都属于一个模型。我喜欢按型号对汽车对象列表进行排序。排序后的列表应该是按照以下顺序,有车型的轿车SEDAN,然后是宝马,然后是独角兽。 所以当我打印排序后的列表时,它应该是这样的 如何使用自定义比较器在模型枚举上实现这种排序顺序。 如果你能帮忙,我很感激
问题内容: 我有一个如下的枚举类: 在我的代码后面,我基本上遍历了Letter枚举,并将其成员打印到控制台: 我认为值()方法会给我的枚举的有序视图(如提到这里),但这里不是这种情况。我只是按照在Letter枚举类中创建它们的顺序来获得枚举成员。有没有一种方法可以按字母顺序输出枚举的值?我需要一个单独的比较器对象,还是有内置的方法来执行此操作?基本上,我希望根据getDescription()文本