对象数组 - 从数组中删除对象

时间:2012-04-26 19:58:45

标签: java arrays object

我被分配了创建臭名昭着的“UNO”游戏的任务。我遇到了其中一种方法的问题,如果他们选择播放它,它应该“删除”玩家手中的一个卡片对象。我想你必须让UNO去理解。无论如何,这里是方法应该是什么的描述:

  

创建一个名为removeCardFromHand的方法,该方法将整数索引作为参数,并在播放器手的该位置移除并返回Card。如果指定的索引与手中的某个卡不对应,则该方法应抛出IndexOutOfBoundsException。   移除卡后,应根据需要重新排列剩余的卡,以便它们占据阵列的最左侧位置。一种方法是将最右边的卡移动到要移除的卡的位置。例如,如果手牌当前是四张牌{蓝色3,红色2,黄色7,绿色1}并且您正在移除位置1(红色2)的牌,则可以将其替换为最后一张牌(绿色) 1),因此得到的手将是:{blue 3,green 1,yellow 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;
}  

显然这是不对的,但我不知道该怎么做。

3 个答案:

答案 0 :(得分:1)

你几乎得到了它,除了你将阵列中的所有卡片向左移动一个位置,所以你要丢弃最左边的卡片,然后将“已移除”的卡片留在阵列中,除非它恰好是最左边的一个。 你想做的只是从卡片向右移动(更高的索引)开始移动卡片。因为我认为这是家庭作业,所以我会让你弄清楚你需要改变的一个表达方式; - )

答案 1 :(得分: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

答案 2 :(得分:0)

您正在向左移动所有卡片。考虑第n张牌的位置。您只需将那些移动到该卡的右侧即可。此外,循环的第一次迭代将尝试执行此操作

cards[0] = cards[0 - 1];

这可能不是你真正希望发生的事情。