所以这是一个名为BackJAck的游戏,当它要求getCard时,我的topIndex为零,所以它试图获得一张卡但是没有卡可以得到。我需要它从52开始。任何人都可以帮助我吗?
public class Deck {
public static final int NUM_FACES = 13;
public static final int NUM_SUITS = 4;
public static final int NUM_CARDS = NUM_FACES * NUM_SUITS;
public static final String[] SUITS = { "Clubs", "Spades", "Diamonds", "Hearts" };
private AbstractCard[] deck;
private int topIndex=0;
public Deck() {
// Instantiate deck and fill it with cards.
deck = new AbstractCard[52];
int cnt = 0;
AbstractCard[] card = new AbstractCard[0];
for ( int v = 1; v <= NUM_FACES; v++) {
for ( int u = 0; u < NUM_SUITS; u++) {
deck[cnt] = new BlackJackCard(v , SUITS[u] );
cnt++;
}
}
}
public void shuffle() {
topIndex=0;
for( int i = 0 ; i < 100; i++ ){
int x = (int) Math.random()*51;
int y= (int) Math.random() *51;
if ( x != y ){
AbstractCard card1 = deck[x];
deck[x] = deck[y];
deck[y] = card1;
}
}
}
public AbstractCard getCard() {
return deck[topIndex++];
}
public int cardsLeft() {
return 52 - topIndex;
}
public boolean hasCards() {
return topIndex<51;
}
}
答案 0 :(得分:1)
很难说,因为您没有向我们提供您的卡类或任何示例调用Deck
类(即 您正在使用Deck
)。
我假设BlackJackCard
延伸AbstractCard
,只存储卡片价值并适合。
我自己创建了一个简单的BlackJackCard
类,看起来您的Deck
构造函数会使用BlackJackCard
填充您的deck数组。
getCard()
将从牌组阵列返回BlackJackCard
,然后递增topIndex
。
运行类似
的内容Deck deck = new Deck();
deck.shuffle();
for (int i = 0; i < 5; i++) {
System.out.println(deck.getCard().toString());
}
应该给出与此类似的结果(格式等可能会有所不同):
(Diamonds, 11)
(Clubs, 2)
(Diamonds, 3)
(Hearts, 1)
(Diamonds, 2)
如果您想从卡片52而不是卡片0开始,我想您可以将topIndex
更改为52并在getCard()
内部递减,而不是递增。您还需要更改cardsLeft()
和hasCards()
的逻辑。
所以看起来Deck
会创建卡片。看起来getCard()
会从你的“套牌”中返回一张牌。如果要从卡52而不是0开始,可以更改方法逻辑。但是如果你的问题是你没有从Deck
获得任何卡片 - 你需要提供有关你正在使用{/ 1>}的信息的信息。
我也注意到了其他一些事情。
Deck
将始终返回0. (int) Math.random()*51
强制转换首先应用于(int)
,这将导致0.因此,您的Math.random()
方法实际上不会随机播放任何内容。
您可能意味着shuffle()
将随机多个,然后转换为int。
您在整个代码中使用51/52。您定义(int) (Math.random() * 51)
,可能很好用它而不是在值中进行硬编码。
构造函数中的NUM_CARDS
未使用。