2012-04-26 27 views
0

人気のあるカードゲーム "UNO"をデザインするには、ユーザーが(-1)を入力してデッキからカードを引き出し、手に入れたら問題が発生しました。 ArrayIndexOutOfBoundsExceptionに格納します。今は、配列の別の要素が作成されていないためですが、このような状況ではどのように行うのかはわかりません。ここでゲームUNO Javaコードデザイン

はaddCardToHand方法のための私のコードです:

public void addCardToHand(Card c) 

    { 
     this.cards[this.cardCount] = c; 
     this.cardCount++; 
    } 

この方法はintiallyプレイヤーに5枚のカードをそれぞれ取得するために動作しますが、それは私が行うことができたすべてです。これは、 "デッキの上部"からCardオブジェクトパラメータを生成する別のクラスの別のメソッドによって呼び出されています。私は次に何をしますか?

+1

これはどれくらいの大きさですか。カード '配列?スペースが必要なときにサイズを変更していますか? – mellamokb

+0

それは実際に私がやる必要があると思ったことですが、別の要素を追加する方法がわかりません!ゲーム開始時にカードが保持するカードの数は5で初期化されています –

答えて

2

単純な配列は、ArrayListのように動的ではないことに注意してください。追加の配列に対応するために自動的にサイズが変更されません。 ArrayListを使用するか、this.cardsより大きい新しいアレイを作成して、その中にすべての値(追加する新しいCardを含む)をコピーしてから、this.cards = newArrayというステートメントを発行します。

+0

ええ、私はArrayListの使用を避けようとしていますが、配列を複製することはそのトリックを行うかもしれないと思います。 –

+0

それはうまくいく - 単純なforループがそれを行うだろう。 – arshajii

0

新しいカードを挿入できない場合は、前のサイズの2倍の新しいアレイを作成できます。そうすれば、カードを追加するたびにアレイ全体をコピーする必要はありません。

だから、あなたは配列a = [1,2,3]を持っていて、新しいカード4を追加したいと思いますができません。新しい配列b = new Card [a.length * 2]を作成し、配列aの前の値をコピーし、必要な位置に4を入れます。あなたは配列a = [1,2,3,4、 - 、 - ]を持つことになります。 3枚のカードを追加した後、配列はa = [1,2,3,4,5,6,7、 - 、 - 、 - 、 - ]などになります。