Java-如何评估最佳高牌手?

Java-如何评估最佳高牌手?,java,poker,Java,Poker,我正在申请扑克。然而,我仍停留在评估高卡上。 (我知道如何获得高牌,但如果2/3玩家的高牌相同怎么办?) 我的清单是按顺序排列的,所以这不是问题所在。问题是我不知道一手5张牌和另一个玩家的牌相比较的好方法 是的,卡片是按rankComparator类排序的 我有一个简单的玩家类,持有一套牌(他的手): 我有一节课来评估我的手,“现在手上什么都没有了。” //这是我的比较器类: 公共类rankComparator实现了Comparator{ @凌驾 公共整数比较(卡卡1、卡2){ 如果(card1

我正在申请扑克。然而,我仍停留在评估高卡上。 (我知道如何获得高牌,但如果2/3玩家的高牌相同怎么办?)

我的清单是按顺序排列的,所以这不是问题所在。问题是我不知道一手5张牌和另一个玩家的牌相比较的好方法

是的,卡片是按
rankComparator
类排序的

我有一个简单的
玩家
类,持有一套牌(他的手):

我有一节课来评估我的手,“现在手上什么都没有了。”

//这是我的比较器类:
公共类rankComparator实现了Comparator{
@凌驾
公共整数比较(卡卡1、卡2){
如果(card1.getRank()==card2.getRank()){
返回card1.getSuit().compareTo(card2.getSuit());
}
返回card1.getRank().compareTo(card2.getRank());
}
}

您可以向
排名
套装
枚举添加方法,以便轻松检索枚举的
int
值。例如,您的
Rank
enum可以如下所示:

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.
}
public-void-calculaterHand(列表卡1、列表卡2){
对于(int i=0;icards2.get(i).getRank().getValue()){
System.out.println(“cards1更大”);
返回;
}else if(cards1.get(i).getRank().getValue()

让我知道这是否与您正在寻找的类似。

即使这只是一个爱好项目,您可能迟早会想向前迈进,评估/比较所有可能的扑克手,而不仅仅是高牌手


这是一个问题,它也有来源。

我不会为您解决它,因为您非常接近,但我可以给您一个提示。在您的Card类中实现了Ordering接口,之后,您只需对cardsMy list数组进行排序即可。这不是问题,问题是我不知道一手5张牌和另一手类似于玩家的牌比较两张牌的好方法?没错!比较两个列表(“整数”),你知道如何比较两个列表的卡片吗?这和我刚才看到的很相似。谢谢你的时间,我可以继续。“你把我引向了正确的方向。”Therelocdeguy没问题。我在我的帖子中添加了一些可能有用的东西。Ace不应该有最高的排名,而不是最低的吗?@PaulSamsotha它可以是最低的,也可以是最高的。在这种情况下,这取决于OP。当仅比较高牌时,Ace始终被视为高牌。唯一的例外是在一些低球或hi-lo扑克游戏中,王牌将被视为低牌。
// 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());
    }
}
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.
}