Java 如何创建一副卡片构造函数

Java 如何创建一副卡片构造函数,java,Java,到目前为止,这就是我所拥有的 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

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

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;
import java.util.Random;
公营甲板
{
公共静态最终内部甲板尺寸=52;
//实例变量
private boolean[]deck;//包含52张扑克牌的隐式集合
private int cardsInDeck;//牌组中当前的牌数
私人随机庄家;//用于随机选择要交易的卡
//建造师
公共甲板
{
deck=新布尔值[52];

对于(int j=0;j我自己,我会使用卡片对象数组作为我的卡片组变量,而不是布尔数组。原始布尔变量只能处于两种状态中的一种,true或false,而一张卡片必须同时具有套装(4个状态中的1个)和等级(13个状态中的1个).

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

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];
}

根据您的评论,您必须使用布尔数组,其中
true
表示卡在那里

第一点:

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

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

第二点:

在您使用的构造函数中:

deck = new boolean[52];
这是完全正确的,但你也有

public static final int DECK_SIZE = 52;
声明,因此我假设您应该在适用的情况下使用
DECK\u SIZE

第三点:

您有两个字段:

private int cardsInDeck;//Number of cards currently in the deck
private Random dealer;  //Used to rendomly select a card to be dealt
未在构造函数中初始化的(至少不在发布的部分中)

最后一点:

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

编辑:

要抽一张牌,你必须

  • 创建一个函数
    drawACard()
    ,用于打印或返回所绘制的卡
  • 从牌组中随机选择一张牌(使用随机生成器
    经销商
    )(保存索引)
  • 检查卡是否仍在卡组中(卡组中的
    true
    /
    false
    在这里会有所帮助)
  • 一旦你有一张卡仍然在牌组中,你就必须通过在
    牌组中适当地设置位置来更新该卡的位置
  • 您还必须适当地更新cardsInDeck变量
  • 现在你有了卡片的索引,你可以从中生成什么样的卡片
  • 既然你现在知道了牌组中牌的顺序,你就可以通过索引来决定你画了什么牌
  • 一旦你有了相应的字符串,比如
    “俱乐部王牌”
    ,你可以用它做任何你需要做的事情

  • 因此,实现的主要部分将是如何将索引=5的内容更改为字符串

    @user116061:您可能想让我们知道您的作业的详细信息,因为这一规定让我感到困惑。这就是我被要求做的:所需的表示隐式存储卡片;从不显式存储卡片。使用52个元素的布尔数组,对应52张扑克牌。元素值如果为true,则表示对应的卡牌在牌组中;如果为false,则表示对应的卡牌已被发牌,且不在牌组中。任何套牌中的所有卡牌都是连续表示的,因此,元素0-12对应于梅花,元素13-25对应于钻石,元素26-38对应于红心,而元素el元素39–51对应于黑桃。@user116061:好的,如果你想“填充”在构造函数中,你应该将数组中的所有布尔值设置为什么?你能重新表述你的问题吗please@user1166061完成后,你必须在牌组数组中将你想要在牌组中拥有的牌标记为true。你应该在构造中传递你想要在牌组中拥有的牌的数量或者。例如,如果cardsInDeck是12,您可以使用dealer生成12个范围为0到DECK_SIZE-1的不同整数,并在这些位置将DECK变量标记为true。这里有一个类似的问题:布尔数组将每个元素上的
    false
    作为
    boolean
    s的默认值在构造函数中使用实例变量,在我的其他方法中,我必须实际使用布尔数组创建实例变量?创建什么?您应该初始化构造函数中的所有字段,然后在其他方法中使用它们。在其他方法中,您只需创建任何需要执行的局部变量该方法需要。您不应该在其他方法中初始化字段。好的,在我在构造函数中初始化布尔数组后,我有52个布尔值设置为true。我的问题是如何使用我刚刚创建的布尔值创建卡片组。我将向代码中添加一些内容,以向您指出正确的方向。我同意这是一个更好的方法,但我认为它不在赋值范围内(根据OP在评论中所说的)(int j=0;j@user1166061不使用二维数组,您可以使用常规数组:您需要在那里计算数学,但它是可行的。例如,您可以说一张卡
    {suite,rank}
    位于
    牌组[rank*4+suite]
    牌组[suite*13+rank]
    ,这没有多大关系。