洗牌在Java平台(Shuffling a deck in Java)

2019-07-29 04:19发布

我还有一个练习,我需要做的,我真的需要帮助。 我甚至不知道我的isFlush方法的工作,因为似乎我的原因未启用的甲板洗牌和处理一只手,我完全被卡住。 有人可以帮助我,或指向我的方向是正确的东西? 这里是练习:

练习12.5本练习的目标是编写生成随机扑克手和他们进行分类,这样我们就可以估算各种扑克手的可能性的程序。 如果你不玩扑克牌不要担心; 我会告诉你,你需要知道的一切。

一个。 作为热身,编写使用shuffleDeck程序和subdeck生成并打印4只随机扑克手每五张牌。 你得到什么好东西? 以下是可能的扑克手,增加值的顺序:与同级别三同两对牌:直同一职级的三张牌:用行列五张牌对:两张牌与同级别两对序平:五张牌具有相同的西装满堂:三张牌有一个排名,两张卡与另外四个一类:四张牌与同级别同花顺:在序列,并与同一花色的五张牌

湾 编写一个名为isFlush方法,它采用一个甲板作为参数,并返回一个布尔值,指示手是否包含齐平。

C。 编写一个名为isThreeKind方法,需要一个手,并返回一个布尔值,指示手是否蕴含着一种三。

d。 编写产生几千手,并检查它们是否包含冲洗或三个类型的循环。 估计得到这些手之一的概率。

即 编写测试其他扑克手方法。 有些人比其他人更容易。 您可能会发现它有用编写可用于多个测试一些通用的辅助方法。

F。 在一些扑克游戏,玩家获得每七张牌,它们形成的七个最好的五手。 修改你的程序产生的七张牌手和重新计算概率。

这里是我的代码:

public class Poker {

    public static void main(String[] args) {
        Deck deck = new Deck ();
        Deck.dealDeck (deck);
    }

}
class Card {

    int suit, rank;
    int index = 0;
    //Card[] deck = new Card [52];

    public Card () {
        this.suit = 0; this.rank = 0;
    }

    public Card (int suit, int rank) {
        this.suit = suit; this.rank = rank;
    }

    public static void printCard (Card c) {
        String[] suits = { "Clubs", "Diamonds", "Hearts", "Spades" };
        String[] ranks = { "narf", "Ace", "2", "3", "4", "5", "6",
        "7", "8", "9", "10", "Jack", "Queen", "King" };
        System.out.println (ranks[c.rank] + " of " + suits[c.suit]);
    }
}

class Deck {

    Card[] cards;


    public Deck (int n) {
        cards = new Card[n];
    }

    public Deck () {
        cards = new Card[52];
        int index = 0;
        for (int suit = 0; suit <= 3; suit++) {
            for (int rank = 1; rank <= 13; rank++) {
                cards[index] = new Card (suit, rank);
                index++;
            }
        }
    }

    public static Deck dealDeck(Deck deck){
        shuffle(deck);
        Deck hand1 = subDeck(deck, 0, 4);
        Deck hand2 = subDeck(deck, 5, 9);
        Deck hand3 = subDeck(deck, 10, 14);
        Deck hand4 = subDeck(deck, 15, 19);
        Deck pack = subDeck(deck, 20, 51);
        return deck;
    }

    public static Deck shuffle(Deck deck){
        for (int i = 0; i < 52; i++){
            int rand = (int)(Math.random()*(i + 1));
            **Deck[] temp = deck[i];
            deck[i] = deck[rand];
            deck[rand] = deck[temp];**
        }
        return deck;
    }

    public static Deck subDeck(Deck deck, int low, int high) {
        Deck sub = new Deck (high-low+1);
        for (int i = 0; i < sub.cards.length; i++) {
            sub.cards[i] = deck.cards[low+i];
        }
        return sub;
    }

    public static void printDeck (Deck hand) {
        for (int i = 0; i < hand.cards.length; i++) {
            Card.printCard (hand.cards[i]);
        }
    }

    public static boolean isFlush(Card[] x, int y) {
        int count = 0;
        for(int index = 0; index < y; index++){
            boolean comp = compareIfFlush(x[index], x[index + 1]);
            if (comp = true){
                count++;
            }
        }
        if (count >= 5){
            System.out.println("Congratulations! You have a flush!");
            return true;
        }
        else{
            System.out.println("Sorry, you do not have a flush.");
            return false;
        }
    }

    public static boolean compareIfFlush(Card c1, Card c2){
        if (c1.suit != c2.suit){
            return false;
        }
        return true;
    }
}

我把大胆的,我遇到问题的一部分。 我得到的错误:“所需的数组,但exercise125poker.Deck发现”。 我需要一个工作,围绕这个错误,因为我不知道如何解决它,所以我卡住了。 任何人都可以帮忙吗?

Answer 1:

你的Deck类型不是数组类型。 它里面有一个数组,但你不能使用它像一个 - 这是什么产生的错误。 考虑这一点......如果你的Deck有两个Card[52]它出现? 那么,如果你叫deck[25]将没有任何意义。 一般来说,当你隐藏的物体内部的数组,你会希望公开与存取方法,如数组public Card get(int i)检索出的内部数组的元素。



Answer 2:

为了解决你的问题,改变的,你强调了这一行代码:

Card temp = deck.cards[i];
deck.cards[i] = deck.cards[rand];
deck.cards[rand] = temp;

有2个问题的代码。

  • 第一是甲板是不是一个数组,并且您想要在其内访问卡阵列(因此增加.cards到阵列)。
  • 另外,甲板[]预计给予甲板的阵列,而不是你试图给它,一个Card

希望这可以帮助,

背风处



文章来源: Shuffling a deck in Java
标签: java poker