用Java洗牌

用Java洗牌,java,poker,Java,Poker,我还有一个练习要做,我真的需要帮助。我甚至不知道我的isFlush方法是否有效,因为似乎出于某种原因,我的牌组没有洗牌和发牌,我完全卡住了。有人能帮我或给我指出正确的方向吗?以下是练习: 练习12.5本练习的目标是编写一个生成 随机扑克手和分类,以便我们可以估计 各种各样的扑克手。如果你不玩扑克,不要担心;我会告诉你一切的 你需要知道 a。作为热身,编写一个程序,使用shuffleDeck和subdeck生成 然后随机打印四张牌,每张牌有五张牌。你得到什么了吗 好吗?以下是可能的扑克牌,按价值递

我还有一个练习要做,我真的需要帮助。我甚至不知道我的isFlush方法是否有效,因为似乎出于某种原因,我的牌组没有洗牌和发牌,我完全卡住了。有人能帮我或给我指出正确的方向吗?以下是练习:

练习12.5本练习的目标是编写一个生成 随机扑克手和分类,以便我们可以估计 各种各样的扑克手。如果你不玩扑克,不要担心;我会告诉你一切的 你需要知道

a。作为热身,编写一个程序,使用shuffleDeck和subdeck生成 然后随机打印四张牌,每张牌有五张牌。你得到什么了吗 好吗?以下是可能的扑克牌,按价值递增顺序排列: 配对:两张等级相同的牌 两对:两对等级相同的牌 一种三张:三张等级相同的牌 直牌:按顺序排列的五张牌 同花顺:五张相同花色的牌 满座:三张牌,一个等级,两张牌,另一个等级 一种四张:四张等级相同的牌 同花顺:连续五张牌,同一套

b。编写一个名为isFlush的方法,该方法将Deck作为参数并返回 布尔值,指示手是否包含齐平

c。编写一个名为isThreeKind的方法,该方法握住一只手并返回一个布尔值 指示手是否包含同一种类的三个

d。编写一个生成几千只手的循环,并检查它们是否 包含一个或三个同花顺。估计得到其中一个的概率 那些手

e。编写测试其他扑克手的方法。有些比其他容易。 您可能会发现编写一些可以 可用于多个测试

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;
    }
}
公共类扑克{
公共静态void main(字符串[]args){
甲板=新甲板();
甲板,甲板(甲板);
}
}
班级卡{
内服,军衔;
int指数=0;
//卡片[]卡片组=新卡片[52];
公共卡(){
this.suit=0;this.rank=0;
}
公共卡(国际诉讼、国际等级){
this.suit=suit;this.rank=rank;
}
公共静态无效打印卡(卡c){
字符串[]套装={“梅花”、“钻石”、“红心”、“黑桃”};
字符串[]排名={“narf”、“Ace”、“2”、“3”、“4”、“5”、“6”,
“7”、“8”、“9”、“10”、“杰克”、“女王”、“国王”};
System.out.println(秩[c.rank]+“of”+诉讼[c.suit]);
}
}
甲板{
卡片[]卡片;
公共甲板(国际北){
卡片=新卡片[n];
}
公共甲板(){
卡片=新卡片[52];
int指数=0;

对于(int Matt=0;Time< p>您的<代码>甲板< /代码>类型不是数组类型。它中有一个数组,但不能像一个那样使用它——这就是生成错误的原因。考虑一下……如果您的<代码>甲板< /代码>中有两个代码>卡[52 ] < /代码> s?那么,如果您调用<代码>甲板[ 25 ]
这没有任何意义。通常,当您将数组隐藏在对象中时,您会希望使用访问器方法(如
public Card get(int i)
来从内部数组中检索元素。

为了解决问题,请将突出显示的代码行更改为:

Card temp = deck.cards[i];
deck.cards[i] = deck.cards[rand];
deck.cards[rand] = temp;
代码有两个问题

  • 第一个是,Deck不是数组,您希望访问其中的cards数组(因此将
    .cards
    添加到数组中)
  • 此外,卡片组[]希望得到一组卡片组,而不是您尝试给它的
    卡片
希望这有帮助


Lee

请记住,java.util.Collections中有一个shuffle方法,它将列表作为参数。正如我在下面所说的,我看不到应该打印文本的任何位置。
new Deck()
只创建卡片数组并将其填充到卡片中。
DealDealDeck()
通过调用
shuffle()来洗牌
然后将
数据组
划分为5个局部变量,并将其分配给
数据组()
函数,然后返回,程序结束。为什么程序不显示文本?@EricPic,因为您给出的代码中没有告诉它,但也应该告诉它@JRaymond@EricPic你是在调用printDeck?还是isFlush?因为现在它们不在你的主目录中…我看到的只是一个
new Deck()
和一笔
交易
,两者都不打印任何文本。DEck()@JRaymond调用它们