这不是完整的代码,但它是导致问题的部分。我已经编写了 isFlush 和 isThreeKind,但由于某种原因,它们似乎总是返回 true,除非第一个 return 语句更改为“return false”,在这种情况下它们总是返回 false。这导致了一个有趣的问题,代码声明 3000/3000 手牌是同花并且包含三张同花,我相当确定这是不可能的。
编辑:是的,我是个白痴,我忘记链接到代码的粘贴箱。
最佳答案
现在您已经添加了代码,看起来您每次都在传递整个牌组。如果是这种情况,按照你的逻辑,你将始终拥有 3 个同花色(因为牌组中每种花色有 4 个)和同花(因为你的逻辑 >= 5)。我怀疑如果你将flush中的逻辑改为 == 5
,它总是会返回 false。
也许你的牌组需要一个 Card[] randomHand(int handSize)
方法来为你提供随机的一手牌,并对其进行测试?它甚至可以是一个尺寸较小的 Deck
对象。
原始答案如下:
这是我的快速而肮脏(并且可能效率低下)的版本...如果不了解您拥有的内容,将很难帮助调试它!
boolean isFlush(Card[] cards) {
for(Card c : cards) {
if(c.suit != cards[0].suit) return false;
}
return true;
}
/**
* returns the value of the set, or 0 if no three-set exists
*/
int isThreeKind(Card[] cards) {
for(int i = 0; i < cards.length - 2; i++) {
if(sumOfType(i.value,cards) >= 3) return i.value; // return the value of the card
}
return 0; // 0 indicates no value
}
int sumOfType(int value, Card[] cards) {
int sum = 0;
for(Card c : cards) if(value == c.value) sum++;
return sum;
}
关于java - 需要 isFlush 和 isThreeKind 方法、扑克类型程序的一些帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5846041/