需要一些帮助isFlush和isThreeKind方法,扑克类程序

时间:2011-05-01 02:37:24

标签: java

这不是完整的代码,但它是造成问题的部分。我写了两个isFlush和isThreeKind,但由于某种原因,它们似乎总是返回true,除非第一个return语句更改为“return false”,在这种情况下它们总是返回false。这导致了代码的有趣问题,声明3000/3000手是冲洗并包含三种,我相当肯定这是不可能的。

编辑:是的我是个白痴,我忘了链接到代码的粘贴框。

http://pastebin.com/bahwrm7Y

1 个答案:

答案 0 :(得分:1)

现在你已经添加了代码,看起来你每次都在传递整个套牌。如果是这种情况,根据你的逻辑,你将总是有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;
}