添加到ArrayList时为NullPointer

时间:2013-03-27 10:42:35

标签: java arraylist

我意识到已经存在一堆像这样的问题,但到目前为止我看到的每一个问题都是ArrayList没有被初始化。我认为我的初始化,但是在尝试添加到列表时我得到了NullPointer。这是我的代码:

import java.util.ArrayList;
import java.util.Random;
import java.util.Collections;

public class Deck {
    static final int DECKSIZE = 48;
    static final int MAX = 10;
    static final int MIN = 1;
    public ArrayList<Card> cardDeck = new ArrayList<Card>();
    Random rand;

    public Deck() {
        initializeDeck();
    }

    private void initializeDeck() {
        for (int i=0; i<DECKSIZE; i++) {
            cardDeck.add(i, new Card("Name" + (i+1),  "Race" + (i+1), "Orientation" + (i+1)));
        }
    }

    public void shuffleCards() {
        Collections.shuffle(cardDeck);
    }
}

这是堆栈跟踪告诉我initializeDeck是一个nullPointer

Caused by: java.lang.NullPointerException
    at hr.krypto.cardwars.deck.Deck.initializeDeck(Deck.java:24)
    at hr.krypto.cardwars.deck.Deck.<init>(Deck.java:15)
    at hr.krypto.cardwars.deck.Dealer.<init>(Dealer.java:14)
    at hr.krypto.cardwars.model.CardTable.<init>(CardTable.java:15)
    at hr.krypto.cardwars.screen.GameScreen.show(GameScreen.java:31)
    at com.badlogic.gdx.Game.setScreen(Game.java:62)
    at hr.krypto.cardwars.CardWarsGame.create(CardWarsGame.java:19)
    at com.badlogic.gdx.backends.lwjgl.LwjglApplication.mainLoop(LwjglApplication.java:127)
    at com.badlogic.gdx.backends.lwjgl.LwjglApplication$1.run(LwjglApplication.java:110)

2 个答案:

答案 0 :(得分:1)

考虑到方法ArrayList.add(index, Element)仅抛出IndexOutOfBoundsException,错误必须位于卡类的构造函数中。

猜测最快的方法是调试卡类构造函数。

答案 1 :(得分:0)

在构造函数Card(String, String, String)内部引发NullPointerException。 如带有行号的堆栈跟踪所示。

如果其他构造函数Card()进行了一些初始化,只需先在添加的构造函数中调用this()


添加堆栈跟踪后:

<强>校正即可。 我打赌使用了仍然rand的运行代码,它没有被初始化(null)。在建造之前先清洁。

或者在不同的包中有两个类Deck,是package hr.krypto.cardwars.deck;中显示的类吗?