【发布时间】:2012-04-30 02:25:37
【问题描述】:
尝试用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 个索引为空。当玩家必须抽一张牌时,我写了一个类似的方法来添加一张牌,它完美无缺。我正在为即将到来的考试练习,它不包括数组列表或向量,所以对我来说没有用。
【问题讨论】:
-
你为什么不想使用
ArrayList? “我知道为什么会发生错误” 请分享。另外,请粘贴异常的整个堆栈跟踪。 -
为什么不用矢量,它可以改变大小?
-
'ArrayList' 存在的主要原因是为了处理这类问题。但你可能有理由不使用它!此外,我认为您在第二个 for 循环中应该是 'i++' (从 n 到cards.length)。
-
@stark 见this。
标签: java arrays playing-cards indexoutofboundsexception