Java 在扑克牌中找到一个平手

Java 在扑克牌中找到一个平手,java,arrays,poker,Java,Arrays,Poker,因此,我的教授决定聪明一点,为我的扑克项目编了一张名为“平直”的牌。这就像一条直线,只是卡片必须是连续的偶数。例如-8,6,2,4,10是一个偶数直线。此外,ace(值为1)可以用作“高端”或“低端”,这意味着它可以是1或14,具体取决于其他卡。我在按升序排列数组中的卡的值时遇到问题,因为我们无法在此项目中使用.sort方法。有人能帮我吗?另外,它是一个介绍性的Java类,所以请尽量使其简单。谢谢 这就是我目前所拥有的 //可以假定只有5张卡作为参数传入 public static boolea

因此,我的教授决定聪明一点,为我的扑克项目编了一张名为“平直”的牌。这就像一条直线,只是卡片必须是连续的偶数。例如-8,6,2,4,10是一个偶数直线。此外,ace(值为1)可以用作“高端”或“低端”,这意味着它可以是1或14,具体取决于其他卡。我在按升序排列数组中的卡的值时遇到问题,因为我们无法在此项目中使用.sort方法。有人能帮我吗?另外,它是一个介绍性的Java类,所以请尽量使其简单。谢谢 这就是我目前所拥有的

//可以假定只有5张卡作为参数传入

public static boolean hasEvenStraight(Card [] cards) {  
        boolean evenCard = false;
        int [] value = new int[cards.length];
        for(int i = 0; i<cards.length; i++){
            Card myCard = cards[i];
            value[i] = myCard.getValue();
            if(value[i]%2 == 0){
                evenCard = true;
            }
            else
                evenCard = false;
        }
        if(evenCard){
            //This is where I am stuck
        }
        return false; 
    }
public静态布尔值hasevendirect(Card[]cards){
布尔值=假;
int[]值=新的int[cards.length];

对于(int i=0;i首先,您的代码中有一个逻辑错误。在
for
循环中,您正在检查当前卡是偶数还是奇数。但是当循环结束时,剩下的是您查看的最后一张卡是否为偶数。您需要检查它们是否都为偶数

    for(int i = 0; i<cards.length; i++){
        Card myCard = cards[i];
        value[i] = myCard.getValue();
        if ( value[i] == 1 ) {
           value[i] = 14;
        }
        if(value[i]%2 != 0)
            return false
        }
    }

将您的问题标记为Java…看起来您应该记录有多少张偶数卡片,例如
if(value[i]%2==0){evenCard++;}
然后在末尾比较它,例如
if(evenCard==cards.length){//您得到了一个偶数直线}
。免责声明:我从未接触过Java,可能语法不正确。抱歉,只是进行了编辑。它需要是连续的偶数,而不仅仅是偶数的集合。然后,您需要在if语句中添加另一个条件,大致如下:if不是卡数组中的第一个元素,值为2 mor比阵列中的前一张牌小。但是如果这些牌是按8,6,2,4,10的方式排列的,那会怎样呢?那么,前一张牌并不总是少2张,但阵列仍然是平直的。哇。非常感谢。非常有意义!我对我的
if
s做了一些更正,就像在前一个版本中一样,可能会出现最低的牌没有r的情况egister是最低的。@samz_manu抱歉,又一次更正,这次是一次严重的更正。我忘了这些牌可以包含两个或更多相同等级但不相同的花色,例如10颗红桃和10颗黑桃。我添加了一种方法来处理布尔数组。你能解释一下布尔数组的作用吗?它不代表sense对我来说。我一开始写代码就意识到我需要检查是否有卡被重复。布尔数组有什么帮助?好的。我已经在代码上面添加了解释。
public static boolean hasEvenStraight(Card [] cards) {  

    int low = 20; // There is no 20 card.
    int high = 0; // There is no 0 card.

    // This array is a bit wasteful as it won't all be used,
    // but it's straightforward this way.

    boolean[] alreadyThere = new boolean[15];

    for(int i = 0; i<cards.length; i++){
        Card myCard = cards[i];
        int currValue = myCard.getValue();

        // Handle ace. If it's 1 it's not an
        // even hand anyway, so assume it's 14.
        if ( currValue == 1 ) {
           currValue = 14;
        }

        // If any card is not even, this is not an Even Straight.
        if(currValue%2 != 0){
            return false;
        }

        // We have two cards of the same number
        // (E.g. 2 of spades and 2 of hearts). So
        // not a straight.
        if ( alreadyThere[currValue] ) {
           return false;
        }
        alreadyThere[currValue] = true;

        // To get the lowest and highest, compare each value to
        // existing lowest and highest and change them accordingly.
        if ( currValue > high ) {
           high = currValue;
        }
        if ( currValue < low ) {
           low = currValue;
        }
    }

    // Loop finished. All the numbers are even, now check if they
    // are consecutive.
    return ( high - low ) == 8;
}