我需要做另一项练习,我真的需要帮助。我甚至都不知道我的isFlush方法是否正常工作,因为似乎有理由我的牌组没有洗牌和交易,我完全卡住了。有人可以帮助我或指出我正确的方向或什么?这是练习:
练习12.5本练习的目标是编写一个生成的程序 随机扑克手并对它们进行分类,以便我们可以估计出它的概率 各种扑克手。如果你不玩扑克,不要担心;我会告诉你一切 你需要知道。
一个。作为预热,编写一个使用shuffleDeck和subdeck生成的程序 打印四个随机扑克牌,每个牌五张牌。你有什么收获吗? 好?以下是可能的扑克手牌,价值递增: 对:两张同等级的牌 两对:两对同等级的牌 三种:同一级别的三张牌 笔直:五张牌顺序排列 同花顺:同一套西装的五张牌 满屋:三张牌一张,两张牌另一张 四种:四张同等级的牌 同花顺:五张牌顺序和同样的西装
湾编写一个名为isFlush的方法,它将Deck作为参数并返回一个 boolean指示手是否包含刷新。
℃。编写一个名为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”。我需要解决这个错误,因为我不知道如何修复它所以我被卡住了。有人可以帮忙吗?
答案 0 :(得分:3)
您的Deck
类型不是数组类型。它有一个数组,但你不能像它一样使用 - 这就是产生错误的原因。考虑一下......如果您的Deck
中有两个Card[52]
,该怎么办?那么如果你打电话给deck[25]
那就没有任何意义了。通常,当您在对象中隐藏数组时,您希望使用public Card get(int i)
之类的访问器方法公开数组,以从内部数组中检索元素。
答案 1 :(得分:1)
为了解决您的问题,请将突出显示的代码行更改为:
Card temp = deck.cards[i];
deck.cards[i] = deck.cards[rand];
deck.cards[rand] = temp;
代码有2个问题。
.cards
添加到数组中。)Card
。希望这有帮助,
利