0

私は悪名高い「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;
}  

明らかにこれは正しくありませんが、どうすればよいかわかりません。

4

2 に答える 2

1

アレイ内のすべてのカードを1つ左に移動していることを除けば、ほぼ理解できたので、一番左のカードをドロップし、一番左にある場合を除いて、「削除された」カードをアレイに残します。 1。取り外したカードの右側(インデックスが高い)のカードからのみ移動を実行する必要があります。これは宿題だと思うので、変更する必要のある1つの表現を理解させます;-)

于 2012-04-26T20:04:13.747 に答える
1

配列が静的サイズで作成されていると仮定します。配列の長さを再割り当てしても、配列のサイズを変更することはできません。おそらく、それをしようとするとエラーが発生します。

クラスで

Add a new variable in the Class, ie. int numberOfCardsInHand.

メソッド removeCardFromHand で

Make a copy of the card to discard, i.e. discardCard.

Iterate from i = n to i < numberOfCardsInHand
  Left shift the remaining cards to the right of the discarded card.

Decrement numberOfCardsInHand by 1.

Return discardCard
于 2012-04-26T22:05:50.793 に答える