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]
,这没有多大关系。