Java 如何让topIndex持有52张卡?

Java 如何让topIndex持有52张卡?,java,blackjack,Java,Blackjack,这是一个叫做BackJAck的游戏,当它需要获取卡片时,我的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 sta

这是一个叫做BackJAck的游戏,当它需要获取卡片时,我的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;
}
公共类甲板{
公共静态最终int NUM_FACES=13;
公共静态最终整数=4;
公共静态最终int NUM_CARDS=NUM_FACES*NUM_SUITS;
公共静态最终字符串[]套装={“梅花”、“黑桃”、“钻石”、“红心”};
私人信用卡[]甲板;
私有int topIndex=0;
公共甲板(){
//实例化牌组并用卡片填充。
卡片组=新的抽象卡片[52];
int-cnt=0;
AbstractCard[]card=新的AbstractCard[0];

对于(int v=1;v很难说,因为您没有给我们您的卡片类或对
Deck
类的任何示例调用(即您如何使用
Deck

我假设
BlackJackCard
扩展了
AbstractCard
,只存储卡值和套装

我自己创建了一个简单的
BlackJackCard
类,看起来你的
Deck
构造函数确实用
BlackJackCard
s填充了你的Deck数组

getCard()
将从组数组返回一张
BlackJackCard
,然后递增
topinex

运行类似于

Deck deck = new Deck();
deck.shuffle();
for (int i = 0; i < 5; i++) {
    System.out.println(deck.getCard().toString());
}
如果您想从卡52开始而不是从卡0开始,我想您可以将
topIndex
更改为52,并在
getCard()
中递减,而不是递增。您还需要更改
cardsLeft()
hasCards()
的逻辑

因此,它看起来像是
Deck
创建了卡。它看起来像
getCard()
将从您的“Deck”返回一张卡。如果您希望从卡52开始而不是从0开始,则可以更改方法逻辑。但是,如果您的问题是没有从
卡组
获得任何卡,则需要提供有关如何使用
卡组
的信息

我还注意到了其他一些事情

(int)Math.random()*51
将始终返回0。
(int)
强制转换首先应用于
Math.random()
,这将导致0。因此您的
shuffle()
方法实际上不会对任何内容进行随机播放。 您可能指的是将随机数乘以整数的
(int)(Math.random()*51)

您在整个代码中使用51/52。您定义
NUM_CARDS
,最好使用它,而不是在值中硬编码

构造函数中的
AbstractCard[]card=new AbstractCard[0];
未使用

(Diamonds, 11)
(Clubs, 2)
(Diamonds, 3)
(Hearts, 1)
(Diamonds, 2)