2013-03-27 44 views
0

我意识到已经有一堆这样的问题,但到目前为止我看到的每个问题都是ArrayList未初始化。我想我的初始化,但我试图添加到列表中时,我得到一个NullPointer。这里是我的代码:NullPointer添加到ArrayList时

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是一个空指针

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) 
+3

请发布堆栈跟踪 – rajesh 2013-03-27 10:43:58

+0

stacktrace应该指出你有问题的地方。 – Howard 2013-03-27 10:44:04

+0

@Keyser此方法只能抛出'IndexOutOfBoundsException' – 2013-03-27 10:46:17

回答

0

一个NullPointerException异常升高的构造Card(String, String, String)内。 如带有行号的堆栈跟踪所示。

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


后,加入堆栈跟踪:

纠错。 我敢打赌,在运行代码仍然rand被使用,这是未初始化(null)。在建筑之前先做一次清洁。

或者有两个不同的包装甲板,是在package hr.krypto.cardwars.deck;显示的类?

+3

哪个堆栈跟踪? – CloudyMarble 2013-03-27 10:47:38

+0

你发布了一个'StackTrace'实际上由OP发布之前的答案,太棒了! – SudoRahul 2013-03-27 10:48:57

+0

我错了。虽然只有卡在这里可能会抛出一个NPE – 2013-03-27 10:54:20

1

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

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

+0

@Henrik你的权利,但考虑到它发生在添加方法,只有一个int和元素参数没有留下太多的地方,在新的对象的构造函数中可能会出现其他错误。因此只是调试。 – CloudyMarble 2013-03-27 11:05:04