gpt4 book ai didi

java - 在 Java 中洗牌

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:22:32 28 4
gpt4 key购买 nike

我还有另一项练习需要帮助才能完成。我什至不知道我的 isFlush 方法是否有效,因为似乎出于某种原因,我的牌组没有洗牌和发牌,我完全被卡住了。有人可以帮助我或指出正确的方向吗?这是练习:

练习 12.5 这个练习的目标是编写一个程序来生成随机扑克牌并对其进行分类,这样我们就可以估计出的概率各种扑克手。如果您不玩扑克,请不要担心;我会告诉你一切你需要知道。

一个。作为热身,编写一个使用 shuffleDeck 和 subdeck 生成的程序并打印四张随机的扑克牌,每手有五张牌。你有没有得到什么好的?以下是可能的扑克手牌,按值(value)递增顺序排列:对:两张点数相同的牌两对:两对点数相同的牌three of a kind:三张等级相同的牌顺子:五张顺序排列的牌同花:五张花色相同的牌葫芦:三张牌有一个等级,两张牌有另一个等级four of a kind:四张等级相同的牌同花顺:五张顺序相同花色的牌

编写一个名为 isFlush 的方法,它将 Deck 作为参数并返回一个指示手牌是否包含同花的 boolean 值。

编写一个名为 isThreeKind 的方法,它需要一只手并返回一个 boolean 值指示手是否包含同类三。

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

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

在一些扑克游戏中,玩家每人拿到七张牌,他们组成一手牌七人中最好的五人。修改您的程序以生成七张牌并重新计算概率。

这是我的代码:

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”。我需要解决此错误,因为我不知道如何修复它,所以我被困住了。谁能帮忙?

最佳答案

您的 Deck 类型不是数组类型。它有一个数组,但你不能像一个数组一样使用它——这就是产生错误的原因。考虑一下……如果您的 Deck 中有两张 Card[52] 怎么办?那么如果你调用 deck[25] 它就没有任何意义。通常,当您将数组隐藏在对象中时,您会希望使用访问器方法公开数组,例如 public Card get(int i) 以从内部数组中检索元素。

关于java - 在 Java 中洗牌,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10369375/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com