添加卡到二十一点

时间:2015-12-11 04:29:18

标签: java arrays blackjack

当我说“addCardToHand”时,我如何添加一张卡片?我尝试card++;hand++;都没有效果。我的代码有问题,还是我刚刚遗漏了一些东西?我觉得我需要添加一些东西,但我不知道是什么。

private AbstractCard[] hand;
private int winCount; 

public AbstractPlayer() {
    hand = new AbstractCard[0];
}

public AbstractPlayer(int score) {

}

public void addCardToHand( AbstractCard card ) {
   AbstractCard[] NewHand = new AbstractCard[hand.length+1];
    for ( int i = 0; i < NewHand.length; i++) {
        NewHand[i] = hand[i];   
    }
}

public void resetHand() {
    hand = new AbstractCard[0];
}

2 个答案:

答案 0 :(得分:0)

我认为可能是因为hand[]中没有任何内容。它被创建为一个大小为0的数组(没有元素),然后当你添加一张卡时,你从索引0的hand[]拉出来,但由于hand[]没有元素,所以&# 39;不要从任何地方拉。

基本上,代码中没有任何地方hand[]变成一个包含其中任何元素的数组,所以当你从hand[0]取出时,那里什么都没有,因为在{{1 },hand = new AbstractCard[0];是数组的大小。

编辑: 您可能希望使用ArrayList(Oracle documentation)(Stack Overflow post),因为它们没有预先定义的大小。在您的情况下,您可以随时添加元素,因此ArrayList非常有用。使用ArrayList,您不必经常创建新阵列。

答案 1 :(得分:-1)

您可能希望跟踪卡片的下一个插入位置,其状态为private int insertCursor = 0;

您的addCardToHand(AbstractCard)方法可以简单地

public void addCardToHand(AbstractCard card) {
    hand[insertCursor++] = card;
}