Javaでカードゲーム「UNO」を作ってみました。プレーヤーがカードをプレイするとき、他の要素を左にシフトして手札から取り除く必要があります。パラメータとして int n を取り、破棄されるカードを参照します。メソッドは、クラスのフィールドとして指定したカード配列を変更する必要があります。これは、カードまたはプレイヤーの手であるオブジェクトの配列です。実行すると、nullPointerException が生成されます。エラーが発生する理由はわかっていますが、修正方法がわかりません。また、配列リストの使用を避けようとしています。また、破棄されたカードを印刷できるように戻します。ありがとう。
public Card removeCardFromHand(int n)
{
Card c = cards[n];
Card[] tempCards = new Card[cards.length - 1];
for(int i = 0; i < n; i++)
{
tempCards[i] = cards[i];
}
for(int i = n; i < cards.length; i--)
{
tempCards[n] = cards[n + 1];
}
cards = tempCards;
return c;
}
エラーコード:
java.lang.ArrayIndexOutOfBoundsException: 7
at Player.removeCardFromHand(Player.java:86)
at BUno.executeOnePlay(BUno.java:112)
at BUno.play(BUno.java:70)
at BUno.main(BUno.java:186)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at edu.rice.cs.drjava.model.compiler.JavacCompiler.runCommand(JavacCompiler.java:271)
この場合、プレイヤーが 7 枚のカードを持っていたために発生しています。7 番目のインデックスが削除されると、その 7 番目のインデックスは空になりました。プレイヤーがカードを引かなければならないときにカードを追加する同様の方法を書きましたが、問題なく動作しました。配列リストやベクトルを扱っていない次の試験の練習をしているので、それらを使用しても意味がありません。