簡體   English   中英

當數組不為空時使索引超出范圍

[英]getting index out of bounds when the array is not empty

我正在制作紙牌游戲,我的一種套牌方法看起來像這樣

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”中得到異常

java.lang.IndexOutOfBoundsException:索引:0,大小:0

我認為這是說數組為空。

為什么是這樣???

當我從甲板類中訪問數組時填充數組,這是方法所在的位置,但是從播放器類中訪問時數組沒有填充

下面是我的整個甲板課

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;
    }

}

您正在通過調用get(0)詢問第一個元素並測試null來測試鏈表是否為空。 這將導致IndexOfOutBoundsException。

如果要確定鏈接列表中是否沒有卡片,可以詢問其大小:

if(arrayOfCards.size() == 0)

...或者您可以調用isEmpty()

if(arrayOfCards.isEmpty())

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM