Как сделать оператор if, чтобы увидеть, имеют ли массивы конкретное число и символы, и возвращает логическое значение - PullRequest
0 голосов
/ 10 мая 2019

Я пишу код, который определяет, какие карты получает пользователь.Возвращает, если это RoyalFlush.

У меня есть некоторый код, который находит RoyalFlush, но он не работает должным образом.

Это мой код;

{
    private Card [] hand;        // the hand of 5 cards

    // the default constructor
    public PokerHand ()
    {
        hand = new Card [5];
    }

    // A constructor to help with testing
    public PokerHand (Card c0, Card c1, Card c2, Card c3, Card c4)
    {
        hand = new Card [5];
        hand[0] = c0;
        hand[1] = c1;
        hand[2] = c2;
        hand[3] = c3;
        hand[4] = c4;
    }

    // This methods fills the hand with cards from the deck.
    // It uses an insertion sort so that the cards are ordered by rank.
    public void fillHand (Deck deck)
    {
        for (int i=0; i<5; i++)
        {
            int j=i-1;
            Card temp = deck.dealCard();
            while (j>=0 && hand[j].getRank() > temp.getRank())
            {   
                hand[j+1] = hand[j];
                j--;
            }
            hand[j+1] = temp;
        }
    }

    // PLACE ADDITIONAL METHODS AFTER THIS COMMENT
    public boolean isRoyalFlush()
    {
        boolean royalFlush = false;
        // simplify the name of hand
        Card c0 = hand[0];
        Card c1 = hand[1];
        Card c2 = hand[2];
        Card c3 = hand[3];
        Card c4 = hand[4];
        // if the five cards in this hand have the same suit, it is flush
        if((c0.getSuit() == c1.getSuit()) && (c1.getSuit() == c2.getSuit())
        && (c2.getSuit() == c3.getSuit()) && (c3.getSuit() == c4.getSuit()))
        {
            // if the five cards in this hand consists of ace, king, queen, jack 
            // and ten, it is royal
            if((c0.getRank() == 10) && (c1.getRank() == 11) && (c2.getRank() == 12)
            && (c3.getRank() == 13) && (c4.getRank() == 14))
             royalFlush = true;
        }
        return royalFlush;
    }

В другом классе, Мне нужно посчитать, сколько пользователей получили RoyalFlush.

if(hand.isRoyalFlush())
                count[0]++;

, но счет всегда показывает 0.

1 Ответ

0 голосов
/ 10 мая 2019

Потому что вы проверили конкретную карту с определенным рангом.Вы каждая карта только с одним рангом.где для флеш-рояля порядок может быть любым.то, что вы проверяете, это первая карта 10, вторая джек и так далее.Но может быть случай, когда первая карта - валет, вторая - 10 и т. Д., И это будет флеш-рояль.

Решение - Сортируйте список карт по рангу перед проверкой на флеш-рояль

...