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

Java 对象数组-从数组中删除对象,java,arrays,object,Java,Arrays,Object,我被分配了创建臭名昭著的“UNO”游戏的任务。我在其中一种方法上遇到了麻烦,如果玩家选择玩的话,这种方法应该是“删除”玩家手中的一个牌对象。我想你一定是玩过乌诺才明白。无论如何,以下是该方法的说明: 创建一个名为removeCardFromHand的方法,该方法将整数索引作为参数,同时移除并返回玩家手牌所在位置的牌。如果指定的索引与手中的某张卡不对应,则该方法应抛出IndexOutOfBoundsException。 取出卡后,应根据需要重新排列剩余的卡,以便它们占据阵列的最左侧位置。一种方法是

我被分配了创建臭名昭著的“UNO”游戏的任务。我在其中一种方法上遇到了麻烦,如果玩家选择玩的话,这种方法应该是“删除”玩家手中的一个牌对象。我想你一定是玩过乌诺才明白。无论如何,以下是该方法的说明:

创建一个名为removeCardFromHand的方法,该方法将整数索引作为参数,同时移除并返回玩家手牌所在位置的牌。如果指定的索引与手中的某张卡不对应,则该方法应抛出IndexOutOfBoundsException。 取出卡后,应根据需要重新排列剩余的卡,以便它们占据阵列的最左侧位置。一种方法是将最右边的卡移动到要卸下的卡的位置。例如,如果手牌当前是四张牌{蓝色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;
}  
public Card removeCardFromHand(int n)
{
卡片c=卡片[n];
对于(int i=n;i

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

你基本上明白了,只是你将阵列中的所有卡向左移动了一个位置,所以你将最左边的卡放下,然后将“移除”的卡留在阵列中,除非它恰好是最左边的卡。
您只想从移除的卡的右侧(更高的索引)开始移动。因为我认为这是家庭作业,所以我会让您找出一个需要更改的表达式;-)

假设数组是使用静态大小创建的。您将无法通过重新指定数组的长度来更改数组大小。可能会给你错误的尝试

在课堂上

Add a new variable in the Class, ie. int numberOfCardsInHand.
在方法中,从手上移除Card

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
复制要丢弃的卡,即丢弃卡。
从i=n迭代到i
如果这是家庭作业,请将其标记为家庭作业。阵列无法调整大小,您必须使用新长度创建一个新阵列,然后您可以使用
System.arraycopy
…在交换要移除的卡和最后一张卡后,即;)将旧阵列复制到新阵列中我稍微修改了代码,并根据要求将其标记为家庭作业。