0

そのため、人気のカード ゲーム「UNO」を設計する際に、ユーザーが (-1) を入力してデッキからカードを引いて手札に加えると、ArrayIndexOutOfBoundsException が発生するという問題に遭遇しました。配列の別の要素が作成されていないことが原因であることがわかりましたが、この状況でどのように作成すればよいかわかりません。

addCardToHand メソッドのコードは次のとおりです。

public void addCardToHand(Card c)

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

この方法は、最初はプレイヤーにそれぞれ 5 枚のカードを取得するために機能しますが、それが私が実行できたすべてです。「デックの一番上」から Card オブジェクト パラメータを生成する別のクラスの別のメソッドによって呼び出されています。次に何をすればいいですか?

4

2 に答える 2

2

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

于 2012-04-26T23:34:55.420 に答える
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,-,-,-,-,-] などになります。

于 2012-04-26T23:56:13.333 に答える