0

Java メソッドが null を返す理由をデバッグしようとしています。詳細はこちら。

単純なカード「ゲーム」を作成していますが、外部メソッドの呼び出しと新しいオブジェクトの作成に問題があります..それはカードのデッキです..カード用に1クラス、デッキ用に1クラス、ゲーム用に1クラス

これはコードが入る私のクラスです

 public class Game
 {
  private InputReader reader;
  private Deck deck;
  private ArrayList<Card> listCard;

/**
 * Constructor for objects of class Game
 */
public Game()
{
    deck = new Deck();
    reader = new InputReader()
    listCard = new ArrayList<Card>();
}

/**
 *
 */
public void dealCard()
{
   listCard.add(deck.takeCard());
}

}// End of Game class

これは、メソッドを取得するデッキクラスです

 import java.util.ArrayList;
 /**
  * Write a description of class Deck here.
  * 
  * @author  
  * @version 2012.05.31
  */
 public class Deck
{
private ArrayList<Card> redblue;

/**
 * Main constructor for objects of class Deck
 */
public Deck()
{
    redblue = new ArrayList<Card>();
}


   public Card takeCard()
{
      **return redblue.remove(0);**  /// this is the Index.pointer.exception
}



}
}// End of class

したがって、私の問題は、デッキから最初のカードを引き出して「手」に追加しようとすることです..だから私は takeCard() を呼び出す dealCard() を呼び出そうとしています.. takeCard() は正常に動作しますが、試してみるとdealCard() を介して null を返し、arrayList に null を追加できないため、エラーが発生した場合に呼び出します。

前もって感謝します

***編集しました。無関係なメソッドとクラスを削除..

4

4 に答える 4

2

Deck のコンストラクタを見てください。

public Deck()
{
    redblue = new ArrayList<Card>();
}

そのコンストラクターが実行された後、redBlue ArrayList には何枚のカードがあるでしょうか?

その ArrayList からカードを削除しようとするとどうなると思いますか?

于 2012-06-11T10:57:11.253 に答える
1

デッキとカードクラスの使用法を示すメイン(ゲームクラス)からさらにコードを投稿する必要があると思います。今私の注意を引いたのはこれだけです:

public Card takeCard()
{
      **return redblue.remove(0);**  /// this is the Index.pointer.exception
}

これによると、次の場合に例外がスローされる可能性があります。

IndexOutOfBoundsException - if index out of range (index < 0 || index >= size()).

あなたのデッキはカードでいっぱいですか?メソッドにチェックを追加できます。カードのリストが空の場合、0 = サイズです。

public void dealCard()
{
   Card card = deal.takeCard();

   if (card != null)
      listCard.add(deck.takeCard());
}

public Card takeCard()
{
    if ( !this.redblue.isEmpty() )
        return redblue.remove(0);

    return null;        
} 
于 2012-06-10T23:43:11.150 に答える
0

赤青には実際には何も入っていないように思えます!あなたがそのようにそれを初期化するとき:

redblue = new ArrayList<Card>();

カード用の空のコンテナを作成しているだけで、実際にカードを入れているわけではありません。あなたがしたいと思うかもしれないことは、赤青のカードを生成する関数を作成することです。

public ArrayList<Card> createInitialDeck(){ 
  //Create an empty ArrayList
  //Do some code here to create new cards..
       //you might want to consider nested for loops if you're creating 13 cards of 4 different suits for example
       //while inside those for loop add each new card object to your array list

   //return arrayList;
}

redblue = new ArrayList<Card>();その後、あなたの代わりにredblue = createInitialDeck();

于 2012-10-20T20:06:39.857 に答える
0

どういうわけかあなたの最初の要素

redblue

無効です。ArrayList では Null を使用できます。

私の推測では、カードのデッキに記入し、最初に追加nullするコードがさらにあると思います。ArrayList

仕様はこちらでご確認ください。ArrayList

于 2012-06-13T16:53:23.930 に答える