2

到目前为止,这就是我所拥有的

import java.util.Random;
public class DeckOfCards
{
public static final int DECK_SIZE = 52;

//Instance Variables
private boolean[] deck; //An implicit set of 52 Playing-Cards
private int cardsInDeck;//Number of cards currently in the deck
private Random dealer;  //Used to rendomly select a card to be dealt

//Constructor
public DeckOfCards()
{
        deck = new boolean[52];
        for (int j = 0; j<deck.length ; j ++)
            deck [j] = false;

我是否朝着正确的方向前进?...在​​此之后我该怎么办?我对布尔数组不是很熟悉

4

3 回答 3

3

我自己,我会为我的甲板变量使用一组 Card 对象,而不是一组布尔值。原始布尔变量只能处于两种状态之一,真或假,而卡片必须同时具有花色(4 种状态中的一种)和等级(13 种状态中的一种)。

于 2012-05-15T00:43:14.503 回答
1

考虑到分配,您应该存储true而不是falsedeck数组中。此外,我会将其设为布尔值的二维数组 - 套件的维度和等级的维度。

private boolean deck[][] = new boolean[13][4];

public DeckOfCards() {
    for (int rank = 0 ; rank != 13 ; rank++)
        for (int suite = 0 ; suite != 4 ; suite++)
            deck[rank][suite] = true;
}

boolean containsCard(int rank, int suite) {
    return deck[rank][suite];
}
于 2012-05-15T00:56:34.770 回答
1

根据您的评论,您必须使用一个布尔数组来true指示卡片在那里。

第一点:

所以当你建造甲板时,它是满的还是空的?

我会假设它会是满的,那么每个单元格的值应该是多少?

第二点:

在您使用的构造函数中:

deck = new boolean[52];

这是完全有效的,但你也有

public static final int DECK_SIZE = 52;

声明所以我会假设你应该DECK_SIZE在适用的地方使用。

第三点:

您有两个字段:

private int cardsInDeck;//Number of cards currently in the deck
private Random dealer;  //Used to rendomly select a card to be dealt

哪些没有在您的构造函数中初始化(至少在您发布的部分中没有)

最后一点:

除了设置本地字段之外,构造函数方法不应该做任何事情。因此,如果您修复deck初始化并初始化其他字段,那么您应该对构造函数有好处。在这种情况下,大部分工作将在抓牌函数中完成。

编辑:

要抽卡,您必须

  1. 创建一个函数drawACard()来打印或返回抽出的卡片
  2. 从牌组中随机选择一张牌(使用随机发生器dealer)(保存索引)
  3. 检查卡片是否仍在牌组中(牌组中的true/false在这里应该有帮助)
  4. 一旦你有一张仍在牌组中的卡片,你必须通过deck适当地设置位置来更新该卡片的位置
  5. 您还必须适当地更新 cardInDeck 变量
  6. 现在您有了卡片的索引,您可以从中生成卡片的索引。
  7. 由于您现在可以确定牌组中卡片的顺序,因此您可以仅从索引中确定您抽出的卡片
  8. 一旦你有了相应的字符串,"Ace of Clubs"你就可以用它做任何你需要的事情

因此,您实现的主要部分将是如何将您拥有的内容更改index=5String "Six of Clubs".

于 2012-05-15T01:00:36.843 回答