2013-03-27 75 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