确定扑克牌是否是直线的功能?

Log*_*man 6 java poker performance

对于家庭作业,我获得了一个卡类,其中列举了Rank和Suit的类型.我需要比较两个扑克牌(每手牌是ArrayList5张牌)并决定胜者.

这个isStraight()功能真让我烦恼,因为我必须在Ace之后重新计算.例如,

女王,王,ACE,两,三

仍被认为是直的.编写此功能的最佳方法是什么?

这是Rank/Suit枚举类型代码,如果有帮助的话.

public enum Rank
{
    TWO(2), THREE(3), FOUR(4), FIVE(5), SIX(6), SEVEN(7), EIGHT(8), NINE(9),
    TEN(10), JACK(11), QUEEN(12), KING(13), ACE(14);

    private final int points;

    private Rank(int points)
    {
        this.points = points;
    }

    public int points()
    {
        return this.points;
    }
}

public enum Suit
{
    DIAMONDS, CLUBS, HEARTS, SPADES;
}
Run Code Online (Sandbox Code Playgroud)

shs*_*mer 9

你是否意识到,根据任何扑克游戏的规则,我曾经玩过或听说过直的不能包裹好吗?Ace可以是低[A,2,3,4,5]或高[10,J,Q,K,A],但它不能包裹.根据这些规则(不是你的规则),我之前已经实现了类似的规则.基本上你对数组进行排序并走它,确保当前的卡比前一个更高.在第一次迭代中,如果它是一个ace,那么你明确检查[A,2,3,4,5].如果是,则返回true,如果不是,则继续使用正常的直线逻辑.这应该让你朝着正确的方向前进.


Aus*_*nen 5

您可以编写一个奇特的算法来返回 true,不管可能的牌数有多少,但如果您意识到排序的手牌上只有 10 个有效组合,您可以只查找这些:

2-6, 3-7, 4-8, 5-9, 6-T, 7-J, 8-Q, 9-K, T-A, (2-5,A)
Run Code Online (Sandbox Code Playgroud)