Javaでカードゲーム "UNO"を作成しようとしています。プレイヤーがカードをプレイするとき、それは他の要素が左にシフトしている状態で手から取り除かなければならない。パラメータとしてint nが取られます。これは破棄されるカードを指します。このメソッドは、クラスのフィールドとして指定したカード配列を変更する必要があります。それは、カードであるオブジェクトの配列、またはプレーヤーの手です。実行されると、nullPointerExceptionが生成されます。私はエラーが発生している理由を知っている、私はそれを修正する方法がわからない。私はまた、配列リストの使用を避けようとしています。また、破棄されているカードを返して印刷することもできます。ありがとう。UNOカードゲーム手札からカードを取り除く
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番目のインデックスは空でした。私は、プレイヤーがカードを引く必要があるときに、カードを追加するための同様の方法を書きました。これは完璧に機能しました。私は今後の試験のために練習しています。これはアレイリストやベクターをカバーしていないので、使用するのは無駄です。
インデックスを持つカードを削除しようとすると、カードn + 1、カードn、カードn -1 ...カード2、カード1}またはArrayIndexOutOfBoundでクラッシュする'ArrayList'を使いたいですか? * "なぜエラーが発生しているのか分かります" *共有する。また、例外のスタックトレース全体を貼り付けてください。 – Jeffrey
ベクトルを使用してサイズを変更できますか? – stark
なぜArrayListを避けるのですか? –