几轮后百家乐游戏与数组引发异常

时间:2019-03-26 22:58:06

标签: java arrays indexoutofboundsexception

我已经快完成游戏了,但是我不确定为什么几轮后它就会掉下来。我相信这与甲板课的写作方式有关。它是由老师提供的,但我可能需要修复它。

我想也许是几轮之后,数组变得太满或什么了,所以我尝试添加一种方法来清除它们。这不起作用,我不认为这是问题所在,但我不确定。


class deck{

    private String [] cards = {"A","K","Q","J","10","9","8","7","6","5","4","3","2"};
    private int cardCount = 1;
    private boolean isShuffled = false;

    //**********Shuffle cards method****************************
    private void shuffleCards(){//shuffle cards method

        for (int i = 0; i < cards.length; i++) {
            int index = (int)(Math.random() * 13);
            String temp = cards[i];
            cards[i] = cards[index];
            cards[index] = temp;
        }
        isShuffled = true;
    }

    //********Ensure the cards get shuffled before dealing******
    public String getCards(){

        if (isShuffled == true){
            cardCount++;
            return cards[cardCount];
        }
        else {
            shuffleCards();//shuffle if they have not
            cardCount++;
            return cards[cardCount];
        }
    }

    //********Show cards method*********************************
    public void showCards(String [] theirCards){

        for (int i = 0; i < theirCards.length; i++) {
            if(theirCards[i] == null){
                continue;
            }
            System.out.print(theirCards[i] + " ");
        }
    }

    public void clearCards(){
        cards = null;
        cards = null;
    }

    //*******Card value method**********************************
    public int getCardValues(String tempChar){

        int indValues = 1;

        switch (tempChar){
            case "A": indValues = 1; break;
             blah blah blah
            case "3": indValues = 3; break;
            case "2": indValues = 2;

        }
        return indValues;
    }
}

我希望游戏会一直循环播放,直到我退出或通过投注耗尽钱,但是在大约3场比赛之后,我得到了这个错误:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 13
    at deck.getCards(Baccarat.java:248)
    at playerObjects.setComputersCards(Baccarat.java:177)
    at Baccarat.main(Baccarat.java:19)

1 个答案:

答案 0 :(得分:0)

两个明显的问题:

首先,将cardCount初始化为1(如前所述)。 其次,在方法getCards()中,在返回卡之前,将cardCount递增。 要解决此问题,您应该将cardCount初始化为-1而不是1。

现在,您总是跳过卡组中的前两张牌,所以只有11张牌,而不是您假设的13张牌,这可能就是为什么您要在第三轮查看索引的原因- -百家乐手通常向玩家和银行各出2到3张牌,这样加起来。

解决方案

首先,您应该将cardCount初始化为-1。 其次,作为故障保护,您应该修改getCards()方法以测试cardCount,如果它的值为12,则已经考虑将其设置为-1并在进行增量/返回卡之前重新洗牌。换句话说,让卡片组自己管理以避免索引超出范围。