UNO纸牌游戏从手中取出卡



尝试在java中创建纸牌游戏"UNO"。当玩家打出一张牌时,应将其从手牌中取出,其他元素向左移动。它采用 int n 作为参数,该参数表示被丢弃的卡。该方法应更改我指定为类字段的卡片数组。它是一个对象数组,它们是卡片或玩家的手。运行时,它会产生一个 nullPointerException。我知道为什么会发生错误,我只是不确定如何解决它。我也试图避免使用数组列表。它还返回正在丢弃的卡,以便可以打印。谢谢。

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 个索引是空的。我写了一个类似的方法,当玩家必须抽一张牌时添加一张牌,效果很好。我正在为即将到来的考试进行练习,该考试不包括数组列表或向量,因此使用它们对我来说毫无用处。

for(int i = n; i < cards.length; i--)
{
    tempCards[n] = cards[n + 1];
}

那是什么 :-(

三个迫在眉睫的问题。首先是您在循环内的数组索引中使用n而不是正确的i

第二个是,即使你修复了它,你也会超越数组的末端。

第三,你应该递增i而不是递减它。递减它意味着循环将永远运行,因为i将始终小于 cards.length .而且,永远,我的意思是直到你开始尝试用cards[-1]做某事:-(

相反,您应该尝试:

for (int i = n; i < cards.length - 1; i++)
    tempCards[i] = cards[i + 1];

你的第二个for循环没有做你期望的事情。你只是一遍又一遍地重新分配tempCards[n] = cards[n+1],同时你不断地递减i

for(int i = n; i < cards.length; i--) 
    { 
        tempCards[n] = cards[n + 1]; 
    } 

看起来i以 3 这样的值开头,该值小于 cards.length,然后i递减为 2、1、0、-1、-2,依此类推。

您可以使用 LinkedList 而不是依赖数组。移除物品(Card(并将其添加到玩家手中会更快。

我看到您发布的代码有两个问题。第一个是潜在的并发访问(但您可以在更高级别处理它(:同时,当一张卡的删除未完全完成时,是否可以添加卡?

第二个在这里:

for(int i = n; i < cards.length; i--) 
{ 
   tempCards[n] = cards[n + 1]; 
}

你应该在另一个方向(i++(做一个副本,否则你的临时卡将包含类似{卡1,卡2,...,卡n-1,卡n+1,卡n,卡n-1 ...卡 2、卡 1} 或使用具有索引的卡崩溃> card.lengh/2

相关内容

  • 没有找到相关文章

最新更新