使用LibGDX数组的java IndexOutOfBoundsException错误
我在运行我的洗牌方法时不断出错。下面是我的洗牌方法。Im使用LibGDX在java中编码,并洗牌数组列表
public Array<Card> shuffle(){
for (int i = 0; i < deckOne.size; i++) {
int length = deckOne.size;
int random = (int)Math.floor(Math.random() * length);
Card c = deckOne.removeIndex(random);
Card temp = deckOne.removeIndex(i);
deckOne.insert(i, c);
deckOne.insert(random, temp);
}
return deckOne;
}
然后我在我的主游戏中调用这个方法:deckOne.shuffle();
出现此错误
Exception in thread "LWJGL Application" java.lang.IndexOutOfBoundsException: index can't be >= size: 19 >= 19
at com.battleforbronze.game.Model.Deck1.shuffle(Deck1.java:57)
我的问题是如何修复这个错误。关于这个话题,我看到的大多数其他问题都说int i = 0
一定是int i = 1
任何帮助都将不胜感激
# 1 楼答案
这条线
生成一个从0到长度的随机整数,因此如果选择了最大值(^{),则该索引对于数组来说太大,因为索引从零开始。因此,要么减去1:
(int)Math.floor(Math.random() * (length - 1))
,要么使用内置的LibGDX函数,该函数返回一个从0到长度的随机整数:但还有另一个问题。从牌组中取出两张牌,然后使用缩小阵列之前获取的索引插入它们。当你到达卡片组的末尾(i==长度-1)时,当你尝试插入新卡片时,它的索引对于现在较小的数组来说太大了(现在的数组长度为-2)
在循环的最后四行中,已经有了一种方便的方法:
实际上,已经有一种方便的方法可以洗牌整个数组,这样就可以用