3

私は Java の初心者で、読んだ概念のいくつかを適用するためのテスト コードを作成しています。そこで、トランプを説明するクラスを作成したいと思いました。カード クラスには、スイートと値の両方を記述するフィールドが含まれています (4 つのスイートすべてで 1 ~ 13)。ご覧のとおり、このクラスの作成は非常に簡単でした。

public class Card {
    private String suite; 
    private int cardValue;

    Card(String s, int cV){
    this.suite = s;
    this.cardValue = cV;
    }

    public String getSuite(){
    return this.suite;
    }

    public int getCardValue(){
    return this.cardValue;
    }
}

このクラスをテストするために別のクラスを作成し、52 枚のカードを配列に追加しました (52 枚のカード デッキを処理する別のクラスがありますが、ここでの質問のコンテキストでは重要ではありません)。と呼ばれるこのクラスにCardTestは、main メソッドが含まれています。すべてをデッキ配列に追加する for ループを作成しましたが、デッキをループしてカードの値 (スイートと値) を出力したいときに問題が発生します。NullPointException エラーが発生します。cardTest クラスは次のとおりです。

public class CardTest {
    public static void main(String[] args){
        Card[] temp = new Card[52];
        for (int i = 0; i <12; i++){
            temp[i] = new Card("Spade", i + 1);
            temp[i+13] = new Card("Club", i + 1);
            temp[i+26] = new Card("Diamond", i + 1);
            temp[i +39] = new Card("Heart", i + 1);
        }
        for (int i = 0; i < 52; i++){
            System.out.println(temp[i].getSuite());
        }
    }
}

このタイプのエラーに関する問題を検索しようとしましたが、収集した唯一のことは、Card オブジェクトがデフォルトの「null」値に設定され、メソッド呼び出しでエラーが発生するという問題があるということです。

4

4 に答える 4

3

カードを作成するための for ループが間違っています。temp[12]、temp[25]、temp[38]、temp[51] を null のままにして、12*4=48 カードしか作成していません。

    for (int i = 0; i <13; i++){
        temp[i] = new Card("Spade", i + 1);
        temp[i+13] = new Card("Club", i + 1);
        temp[i+26] = new Card("Diamond", i + 1);
        temp[i +39] = new Card("Heart", i + 1);
    }
于 2012-09-08T00:52:40.860 に答える
3

明らかに、Card配列に 52 個のインスタンスを追加していません (12 回の反復ごとに 4 個追加します。12 * 4 = 48 != 52)。そのため、配列全体をループすると、必然的に値の一部が変化しますnull(オブジェクトの配列には、最初はnulls しか含まれていないことに注意してください)。ループするまでi < 13これを修正する必要があります。

于 2012-09-08T00:52:54.363 に答える
1

問題はここにあります:

        temp[i+13] = new Card("Club", i + 1);

12 になることはないため、nullpointer 例外が発生します。

于 2012-09-08T00:52:22.733 に答える
0

問題は、配列をインデックス 50 (11 + 39) までしか埋めていないことtempと、2 番目のループがインデックス 51 にアクセスしようとすることです。最初のループの上限は、12 ではなく 13 にする必要があります。

于 2012-09-08T00:52:25.273 に答える