gpt4 book ai didi

java - 实现与 2 个枚举相当

转载 作者:行者123 更新时间:2023-12-01 18:23:04 25 4
gpt4 key购买 nike

我正在创建一个Java模拟红心大战的程序。我有一个Card我为另一个纸牌游戏模拟创建的类:

public abstract class Card  implements Comparable<Card>{

public enum Suits {
SPADES,
CLUBS,
HEARTS,
DIAMONDS
}

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

private Suits suit;
private Values value;

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

public Values getValue() {
return value;
}

public Suits getSuit() {
return suit;
}

public void showCard() {
value = getValue();
suit = getSuit();

System.out.println(value + " of " + suit);
}

private int compareTo(final Card comparedToCard) {
//code here
}

}

我需要一些帮助来实现 compareTo方法。我有使用此方法的经验,以及它应该如何根据您想要比较对象的方式返回 1、0 或 -1。但是,我从未使用 enums 实现它前。我知道Enum类实现了可比较的,但即使在查看了 API 文档之后,我也不知道如何比较两个枚举。

我想要的结果是对 ArrayList<Card> 进行排序以这样的方式,它们将首先按 Suit 排序。 :梅花 -> 方 block -> 黑桃 -> 红心,并按 Value 排序。所以:梅花(2->Ace)、钻石(2->Ace)等...

任何帮助将不胜感激

最佳答案

枚举已经有 compareTo 。这取决于枚举常量的序数值。序数按照出现的顺序赋予枚举。

对于红心和许多游戏,卡牌的值(value)取决于游戏的状态。因此,虽然您可以使用 Values 的默认 compareTo 来比较相同颜色的牌,但您仍然需要确定回合内牌的实际值/em>.在心中使用颜色中的顺序是没有意义的。 您当然不应该在卡片类中创建 compareTo

对于纸牌游戏,应谨慎使用 compareTo,并且不应使其动态化。如果顺序不是您问题中的默认顺序,则根本不要使用它。请记住,compareTo 用于在一组具有自然顺序的元素中进行比较。在许多纸牌游戏中,纸牌的值(value)会随着游戏的进行而波动,因此不存在这种自然顺序。

<小时/>

如果必须的话,您可以为每一回合创建一个新的比较器,不过,这个比较器只支持与第一张卡牌相同花色的任何卡牌。由于第一张牌应始终出现在检查的牌列表中,因此单副牌应始终有获胜者。

public class TurnComparator implements Comparator<Card> {
private final Suits firstCardSuite;

TurnComparator(Suits firstCardSuite) {
this.firstCardSuite = firstCardSuite;
}

@Override
public int compare(Card o1, Card o2) {
if (o1.suit != firstCardSuite && o2.suit != firstCardSuite) {
return 0;
}

if (o1.suit != firstCardSuite && o2.suit == firstCardSuite) {
return -1;
}


if (o1.suit == firstCardSuite && o2.suit != firstCardSuite) {
return 1;
}

return o1.value.compareTo(o2.value);
}
}

关于java - 实现与 2 个枚举相当,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27096288/

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