Java - 如何评估最好的高牌手?
Posted
技术标签:
【中文标题】Java - 如何评估最好的高牌手?【英文标题】:Java - How to evaluate the best high card hand? 【发布时间】:2019-01-28 05:11:59 【问题描述】:我正在制作一个扑克应用程序。然而,我坚持评估高卡。 (我知道怎么拿高牌,但是如果2/3玩家的高牌一样呢?)
我的清单是有序的,所以这不是问题。问题是我不知道将 5 张牌与其他玩家的手牌进行比较的好方法。
是的,卡片按rankComparator
类排序。
我有一个简单的Player
类,其中包含一组卡片(他的手):
public class Player
private List<Card> cards;
private int valueWaarde;
private String valueAsString;
private String name;
private HandEval1 h1;
public String getValueAsString()
return valueAsString;
public Integer getValueWaarde()
return valueWaarde;
public List<Card> getCards()
return cards;
public Player(String name)
this.name = name;
public Player()
public void addCard(Card c)
if (cards == null)
this.cards = new ArrayList<>();
this.cards.add(c);
public void clearCards()
if (cards != null)
cards.clear();
public Map<String, Integer> valueOfHand(List<Card> cards, List<Card> cardsBoard)
h1 = new HandEval1(cards, cardsBoard);
Map<String, Integer> map = h1.evaluateHand();
for (Map.Entry<String, Integer> entry : map.entrySet())
this.valueWaarde = entry.getValue();
this.valueAsString = entry.getKey();
return map;
@Override
public String toString()
return name;
我有一个简单的卡片类如下:
public class Card
private final int suitValue;
private Rank rank;
private Suit suit;
private int value;
public int getSuitValue()
return suitValue;
public int getValue()
return value;
public Rank getRank()
return rank;
public Suit getSuit()
return suit;
public enum Suit
h(1), c(2), d(3), s(4);
final int value;
Suit(int value)
this.value = value;
public enum Rank
ACE(1),TWO(2), THREE(3), FOUR(4), FIVE(5), SIX(6), SEVEN(7), EIGHT(8), NINE(9), TEN(10),
JACK(11), QUEEN(12), KING(13);
final int value;
Rank(int value)
this.value = value;
//Constructor
public Card(Rank rank, Suit suit)
this.rank = rank;
this.suit = suit;
this.value = rank.value;
this.suitValue = suit.value;
// methods
public static String rankAsString(int rank)
return String.valueOf(Rank.values()[rank ]);
public static String suitAsString(int suit)
return String.valueOf(Suit.values());
public String getFilename()
return "resource/Cards/" + rank.value + suit + ".gif";
我有一门课来评估我的手,“现在什么都没有了。”:
// This is my comparator class:
public class rankComparator implements Comparator<Card>
@Override
public int compare(Card card1, Card card2)
if (card1.getRank() == card2.getRank())
return card1.getSuit().compareTo(card2.getSuit());
return card1.getRank().compareTo(card2.getRank());
【问题讨论】:
我不会为你解决,因为你很亲密,但我可以给你一个提示。在你的 Card 类中实现 Ordering 接口,之后你就可以对卡片数组进行排序了 我的清单是有序的。这不是问题,问题是我不知道有什么好方法可以将 5 张牌与其他玩家进行比较 喜欢比较两个列表? 没错!比较 2 个 ( "Integers" ) 列表, 你知道如何比较两张卡片列表 【参考方案1】:您可以向 Rank
和 Suit
枚举添加一个方法,以便轻松检索枚举的 int
值。例如,您的 Rank
枚举可能是这样的:
public enum Rank
ACE(1),TWO(2), THREE(3), FOUR(4), FIVE(5), SIX(6), SEVEN(7), EIGHT(8), NINE(9), TEN(10),
JACK(11), QUEEN(12), KING(13);
final int value;
Rank(int value)
this.value = value;
public int getValue() // Added method
return value;
那么您可以执行以下操作来根据他们的等级比较两只手:
public void calculateGreaterHand(List<Card> cards1, List<Card> cards2)
for (int i = 0; i < cards1.size(); i++)
if (cards1.get(i).getRank().getValue() > cards2.get(i).getRank().getValue())
System.out.println("cards1 is greater");
return;
else if (cards1.get(i).getRank().getValue() < cards2.get(i).getRank().getValue())
System.out.println("cards2 is greater");
return;
// If code gets to this point, then the hands are equal.
如果这与您正在寻找的相似,请告诉我。
【讨论】:
它与我正在寻找的相似。谢谢你的时间,我可以继续前进。你把我引向了正确的方向。 @TheRealCodeGuy 没问题。我正在向我的帖子中添加一些可能会有所帮助的内容。 王牌不应该是最高的,而不是最低的吗? @PaulSamsotha 它可能是最低的或最高的。在这种情况下,这取决于 OP。 仅比较高牌时,A 总是被视为高牌。唯一的例外是在一些低牌或高低牌扑克游戏中,A 将被视为低牌。【参考方案2】:即使这只是一个爱好项目,您也可能迟早要站出来评估/比较所有可能的牌手,而不仅仅是高牌手。
这是great article about evaulating poker hands,它也有来源。
【讨论】:
以上是关于Java - 如何评估最好的高牌手?的主要内容,如果未能解决你的问题,请参考以下文章