对于家庭作业,我获得了一个卡类,其中列举了Rank和Suit的类型.我需要比较两个扑克牌(每手牌是ArrayList
5张牌)并决定胜者.
这个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; }
shsteimer.. 9
你是否意识到,根据任何扑克游戏的规则,我曾经玩过或听说过直的不能包裹好吗?Ace可以是低[A,2,3,4,5]或高[10,J,Q,K,A],但它不能包裹.根据这些规则(不是你的规则),我之前已经实现了类似的规则.基本上你对数组进行排序并走它,确保当前的卡比前一个更高.在第一次迭代中,如果它是一个ace,那么你明确检查[A,2,3,4,5].如果是,则返回true,如果不是,则继续使用正常的直线逻辑.这应该让你朝着正确的方向前进.
你是否意识到,根据任何扑克游戏的规则,我曾经玩过或听说过直的不能包裹好吗?Ace可以是低[A,2,3,4,5]或高[10,J,Q,K,A],但它不能包裹.根据这些规则(不是你的规则),我之前已经实现了类似的规则.基本上你对数组进行排序并走它,确保当前的卡比前一个更高.在第一次迭代中,如果它是一个ace,那么你明确检查[A,2,3,4,5].如果是,则返回true,如果不是,则继续使用正常的直线逻辑.这应该让你朝着正确的方向前进.