-6

この例外をスローし続けますが、これまでのところ、必要なとおりに動作しているプログラムの出力の間に表示されます。問題は何ですか?

これが例外をスローする場所です: public class RunGame {

public static void main(String[] args) {
    //Create players
    Hand Player1 = new Hand(5);
    Hand Player2 = new Hand(5);
    Hand Player3 = new Hand(5);
    Hand Player4 = new Hand(5);

    Deck deck = new Deck();
    Card print = new Card(1,'c');

    deck.Shuffle();
    for (int i = 0; i <= 52; i++){
        print = deck.getCard(i); //**THROWS HERE**
        System.out.println(print.toString());
    }    

そして、私の Deck クラスには次のものがあります。

public class Deck {
private char suit;
private int value;
private Card [] deck = new Card[52];

public Deck(){ 

    int count = 0;
    for(int i = 1; i <= 4; i++) {
        if (i == 1)
        {
            suit = 'C';
        }
        else if (i == 2) {
            suit = 'D';
        }
        else if (i == 3)  {
            suit = 'H';
        }
        else {
            suit = 'S';
        }
        for (int x = 1; x <= 13; x++){
            deck[count] = new Card(x, suit);
            count++;
        }
    }
}

public Card getCard(int i){
    int v = deck[i].getValue(); //**AND HERE**
    char s = deck[i].getSuit();
    Card temp = new Card(v,s);
    return temp;
}

デッキが正しくシャッフルされていることを確認するために、デッキを印刷したかっただけです。すべてがうまく印刷されますが、それでもそれが示されます。(私のデッキ オブジェクトは 52 枚のカードの配列で、getValue メソッドと getCard メソッドは Card クラスにあります。)

4

2 に答える 2

1

ある時点でループ内のdeck.getCard(i)がnullを返し、そのnull参照からtoString()を呼び出そうとすると、プログラムがクラッシュすると推測しています。

おそらく、あなたのループは <= の代わりに i < 52 と言うはずですか? ただし、これにより ArrayIndexOutOfBoundsException が発生するはずでした。Deck クラス全体を見ないとわかりません。

于 2013-10-15T23:27:56.557 に答える
1

52枚のカードを持っています。
0 (正しい) からカウントを開始すると、カウント 51 でカード #52 に到達します。52
までカウントします。要素 0 をカウントに含める必要があるため、これは正しくありません。
単純なオフバイワンエラー。

コードを次のように変更します。

for (int i = 0; i < 52; i++){
    print = deck.getCard(i); //No more exception
于 2013-10-15T23:29:49.143 に答える