到目前为止,这就是我所拥有的
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;我的方向对吗?这之后我该怎么做?我对布尔数组不是很熟悉。
发布于 2012-05-15 08:43:15
就我自己而言,我会使用一个Card对象数组作为我的deck变量,而不是一个布尔数组。原始布尔变量只能处于两种状态之一,true或false,而卡片必须同时具有花色(4个状态中的1个)和排名( 13个状态中的1个)。
发布于 2012-05-15 08:56:35
考虑到赋值,您应该在deck数组中存储true而不是false。此外,我将使其成为布尔值的二维数组-一个用于套件的维度,一个用于秩的维度。
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-15 09:00:37
根据您的注释,您必须使用一个布尔数组,其中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初始化并初始化了其他字段,那么您应该很适合这个构造函数。本例中的大部分工作将在抽牌的函数中完成。
编辑:
要抽出一张牌,你必须
drawACard()从卡组中选择一张卡(使用随机生成器dealer) (保存索引)true/false会有所帮助)deck中设置位置来更新该卡位置还必须更新cardsInDeckappropriately
"Ace of Clubs",您就可以对该执行所需的任何操作
因此,您实现的主要部分将是如何将具有index=5的内容更改为String "Six of Clubs"。
https://stackoverflow.com/questions/10592817
复制相似问题