首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何创建一副纸牌构造函数

如何创建一副纸牌构造函数
EN

Stack Overflow用户
提问于 2012-05-15 08:42:21
回答 3查看 2.4K关注 0票数 2

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

代码语言:javascript
复制
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;

我的方向对吗?这之后我该怎么做?我对布尔数组不是很熟悉。

EN

回答 3

Stack Overflow用户

发布于 2012-05-15 08:43:15

就我自己而言,我会使用一个Card对象数组作为我的deck变量,而不是一个布尔数组。原始布尔变量只能处于两种状态之一,true或false,而卡片必须同时具有花色(4个状态中的1个)和排名( 13个状态中的1个)。

票数 3
EN

Stack Overflow用户

发布于 2012-05-15 08:56:35

考虑到赋值,您应该在deck数组中存储true而不是false。此外,我将使其成为布尔值的二维数组-一个用于套件的维度,一个用于秩的维度。

代码语言:javascript
复制
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];
}
票数 1
EN

Stack Overflow用户

发布于 2012-05-15 09:00:37

根据您的注释,您必须使用一个布尔数组,其中true表示卡片在那里。

第一点:

那么,当你建造甲板时,它是填满的还是空的?

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

第二点:

在您使用的构造函数中:

代码语言:javascript
复制
deck = new boolean[52];

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

代码语言:javascript
复制
public static final int DECK_SIZE = 52;

声明,所以我假设您应该在适用的地方使用DECK_SIZE

第三点:

您有两个字段:

代码语言:javascript
复制
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()从卡组中选择一张卡(使用随机生成器dealer) (保存索引)
  2. 检查卡是否仍在卡组中(此处使用卡组中的true/false会有所帮助)
  3. 一旦有仍在卡组中的卡,您必须通过在deck中设置位置来更新该卡位置还必须更新cardsInDeck

appropriately

  1. Now您有卡片的索引,您可以从中生成哪张卡片。
  2. 由于您现在可以确定卡片在扑克中的顺序,因此您可以仅通过索引来确定您绘制的卡片
  3. 一旦您有了相应的字符串,例如"Ace of Clubs",您就可以对该

执行所需的任何操作

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10592817

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档