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