当数组不为空时,使索引超出范围

时间:2016-02-17 21:24:07

标签: java arrays eclipse debugging

我正在制作纸牌游戏,其中一种套牌方法看起来像这样

public Cards getCardFromDeck() {

    if (arrayOfCards.get(0) == null) {
        makeDeck();
        shuffleDeck();
    }

    Cards topOfTheDeck = arrayOfCards.get(0);
    arrayOfCards.remove(0);


    return topOfTheDeck;
}

arrayOfCards是一个链接列表,我填写了52张卡片。

现在的问题是,当我在main方法中调用getCardFromDeck时,这完全正常。

但是当我尝试通过另一个类访问它时 我的方法如下所示

public void addToHand() {
    hand.add(deck.getCardFromDeck());
}

我在线程“main”中得到了Exception

  

java.lang.IndexOutOfBoundsException:Index:0,Size:0

我认为该数组是空的。

为什么这个?

当我从deck类访问它时,

数组被填充,这是方法所在但不是我从玩家类访问时

下面是我的整个甲板课

package com.jc.blackjack;

import java.util.Collections;
import java.util.LinkedList;
import java.util.List;

public class Deck {

    private List<Cards> arrayOfCards = new LinkedList<>();

    public void makeDeck() {

        for (int i = 0; i < 4; i++) {
            for (int j = 0; j < 13; j++) {
                Cards card = new Cards(i, j);
                arrayOfCards.add(card);
            }
        }
    }

    public void callDeck() {
        for (Cards arbCards : arrayOfCards) {
            System.out.println(arbCards);
        }
    }

    public void shuffleDeck() {
        Collections.shuffle(arrayOfCards);
    }    

    public Cards getCardFromDeck() {

        if (arrayOfCards.get(0) == null) {
            makeDeck();
            shuffleDeck();
        }

        Cards topOfTheDeck = arrayOfCards.get(0);
        arrayOfCards.remove(0);


        return topOfTheDeck;
    }

}

1 个答案:

答案 0 :(得分:1)

您正在测试链接列表是否为空,方法是通过调用get(0)并测试null来询问第一个元素。这将导致IndexOfOutBoundsException。

如果您想知道链表是​​否没有卡片,您可以询问它的尺寸:

if(arrayOfCards.size() == 0)

...或者您可以致电isEmpty()

if(arrayOfCards.isEmpty())