【问题标题】:Boolean Methods with Arrays, coding issue带有数组的布尔方法,编码问题
【发布时间】:2015-01-18 21:06:25
【问题描述】:

我需要一些帮助来编码这些方法。每种方法都应该检查一组 5 张牌,存储为一个数组,在扑克中是否确定手牌,例如一对、两对、满屋等。这就是我目前所拥有的。此外,sort() 将卡片从小到大排序,按照梅花、方块、红心和黑桃的顺序排列。最后,对于括号中的任何格式问题,我深表歉意。谢谢。

private boolean isOnePair(){//checks if one pair exists---Done
    sort();
    for(int i=0;i<cards.length-2;i++){
        if(cards[i].compareTo(cards[i+1])==0){
            return true;
        }
        else{
            return false;
        }
    }
}

理论上,这个人会检查手中是否存在一对。我相信它已经完成并且有意义,但如果它没有,请告诉我原因。

private boolean isTwoPair(){//check if two pair exists---
    sort();
    for(int i=0;i<cards.length-2;i++){
        if(cards[i].compareTo(cards[i+1])==0){
            return true;
        }
    }else{
        return false;
    }
}

这是我需要帮助的地方。它需要检查是否有两个不同的对。我假设我需要像在 isOnePair 中那样检查一些东西。另外,由于从技术上讲(在现实生活中,不是卡片术语),四对被认为是两对,这会是一个问题吗?

private boolean isThreeOfAKind(){//check if three of a kind---Done
    sort(); 
    for(int i=0;i<cards.length-3;i++){
        if((cards[i].compareTo(cards[i+1])==0)
              &&(cards[i+1].compareTo(cards[i+2])==0)){
            return true;
        }else{
            return false;
        }
    }
}   

这会检查一张牌是否有三种。这个我觉得不错

private boolean isStraight(){//check if all in a row---Done
    sort();
    for(int i=0;i<cards.length-1;i++){
        if(cards[i]<cards[i+1]&&()cards[i+1]-cards[i])==1)){
            return true;
        }else{
            return false;
        }
    }
}

这会检查牌是否是顺子。所以它们是按数字顺序排列的,因为每张卡片之间的差必须是 1。

private boolean isFlush(){//check if all have same suit---
    sort();
    for(int i=0;i<cards.length-1;i++){
    }
}

这也是我最想提供帮助的地方。我的麻烦只是如何检查西装背后的想法。我知道你们没有告诉你西装价值的实际代码,但如果有人可以帮助我思考它的过程。

private boolean isFourKind(){//check if four of a kind---Done
    sort();
    for(int i=0;i<cards.length-4;i++){
        if((cards[i].compareTo(cards[i+1])==0)
                &&(cards[i+1].compareTo(cards[i+2])==0)
                &&(cards[i+2].compareTo(cards[i+3])==0)){
            return true;
        }else{
            return false;
        }
    }
}

检查四种。应该没问题。

private boolean isRoyalFlush(){//check if from 10-Ace and All of same suit---
    sort();
    for(int i=0;i<cards.length-1;i++){
    }
}

这应该是同花顺和同花顺的组合。但最后一个条件是 slot card[0]==10 中的卡。

【问题讨论】:

  • 你所有的配对检查都是错误的。从 for 条件开始是错误的。您拥有它的方式将只检查 4 张卡。在 2 对中,假设您有 3、3、6、7、7,您的条件将失败。
  • 请注意:您可能希望在您的 Card 类上覆盖 equals,因为在这里您没有将 compareTo 用于除相等检查之外的任何内容。

标签: java arrays function methods boolean


【解决方案1】:

要检查您是否有两对,只需创建一个计数器,每次找到一对时递增 - 而不是立即返回 true。如果您的计数器达到 2,则返回 true。

此外,您对两对和四对相似的担忧都应该在这些方法之外处理。例如,首先检查您是否有限制性最强(或最高点)的牌,只有当您没有时,才检查下一个限制性牌。

最后,如果您的 Card 类没有可见的花色变量(或返回花色的 getter 函数),您将无法对此进行编程。一旦你有了它,你就可以很容易地检查是否有同花顺、同花顺+直线等。在你实现这个之后,它应该看起来像下面这样

int suit = cards[0].getSuit();
for (int i = 1; i < cards.length; ++i) {
    if (suit != cards[i].getSuit()) // checks to see if you have a card of a different suit
        return false;
}
return true; // suits of all cards are the same

PS:并不真正了解扑克规则。顺子可以由不同花色的牌组成吗?

【讨论】:

    猜你喜欢
    • 2014-06-18
    • 1970-01-01
    • 2014-08-31
    • 2012-09-19
    • 1970-01-01
    • 1970-01-01
    • 2011-10-02
    • 2020-04-23
    • 2019-10-06
    相关资源
    最近更新 更多