私は悪名高い「UNO」ゲームを作成する仕事を割り当てられています。プレイヤーがプレイすることを選択した場合、プレイヤーの手札にあるカード オブジェクトの 1 つを「削除」することになっているメソッドの 1 つで問題が発生しています。理解するにはUNOをプレイしたことがあると思います。とにかく、メソッドがどうあるべきかの説明は次のとおりです。
パラメータとして整数インデックスを取り、プレイヤーの手のその位置にあるカードを削除して返す removeCardFromHand という名前のメソッドを作成します。指定されたインデックスがハンド内のカードのいずれにも対応しない場合、メソッドは IndexOutOfBoundsException をスローする必要があります。カードを取り除いた後、必要に応じて残りのカードを再配置して、配列の一番左の位置を占めるようにする必要があります。これを行う 1 つの方法は、削除するカードの位置に一番右のカードを移動することです。たとえば、手札が現在 4 枚のカード {青 3、赤 2、黄 7、緑 1} で、位置 1 (赤 2) のカードを取り除く場合、最後のカード (緑1) したがって、結果の手札は次のようになります: {青 3, 緑 1, 黄 7}.
残念ながら、配列リストまたはベクトルを使用することは許可されていません。単純な古い配列だけです
これまでの私のコードは次のとおりです。
public Card removeCardFromHand(int n)
{
Card c = cards[n];
for(int i = n; i < cards.length; i--)
{
cards[n] = cards[n + 1];
}
c = cards[cards.length - 1];
return c;
}
明らかにこれは正しくありませんが、どうすればよいかわかりません。