0

このような質問はすでにたくさんあると思いますが、これまでに見たすべての問題は、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)
4

2 に答える 2

1

ArrayList.add(index, Element)メソッドがエラーをスローするだけであることを考えると、IndexOutOfBoundsExceptionカードクラスのコンストラクターにある必要があります。

最速の方法は、カードクラスコンストラクターにデバッグすることだと思います。

于 2013-03-27T10:49:22.117 に答える
0

コンストラクター内Card(String, String, String)でNullPointerExceptionが発生します。行番号付きのスタックトレースで示されているように。

他のコンストラクターが初期化を行う場合は、最初に追加されたコンストラクター内をCard()呼び出します。this()


スタックトレースが追加された後:

訂正。実行されたコードはまだrand使用されていますが、初期化されていません(null)。構築する前に、まずクリーンを実行してください。

または、異なるパッケージに2つのクラスDeckがありますが、表示されているクラスはpackage hr.krypto.cardwars.deck;

于 2013-03-27T10:46:08.563 に答える