我正在制作卡片游戏战争的程序,我需要卡片不再出现所以我使用了数组列表。我遇到了这个数组列表的麻烦,因为它应该是随机的并删除数字,但我得到错误IndexOutOfBoundsException:Index 0,Size 0
List<Integer> values = new ArrayList<Integer>();
Random random = new Random();
Integer rand = random.nextInt(values.size()+1);
Integer cardId = values.get(rand);
values.remove(rand);
答案 0 :(得分:3)
首先将您的卡添加到您的值列表中(例如可能不是整数)。 我所说的就是这个,你需要一副牌才能玩。
答案 1 :(得分:2)
你的清单是空的,你是
1)尝试检索值
2)尝试删除值
因为列表为空而抛出错误。
旁注:您可以将rand
和cardId
定义为int
,而不是Integer
。自动装箱/拆箱将为您解决这个问题。
为您的列表添加值,它将按预期工作(如果您将random.nextInt(values.size()+1)
更改为random.nextInt(values.size())
)。
答案 2 :(得分:2)
您收到此错误是因为您尝试访问空数组的索引0,正如它所说的那样。你不能这样做。
您的代码有多个问题。
您实际上并未在values
中存储任何内容。
.get()
的可接受索引范围是0到size-1。 random.nextInt(size+1)
的返回范围是0到大小。这可能会产生超出范围的索引值。数组索引从0开始。
答案 3 :(得分:0)
提供数组中值的代码...或者在数组中添加值。
答案 4 :(得分:0)
您需要首先提供列表值,然后才能get
值
List<Integer> values = new ArrayList<Integer>();
Random random = new Random();
Integer rand = random.nextInt(values.size()+1);
尝试此操作以放置值
for (int i = 1; i <= 52; i++){
values.add(i);
}
Integer rand = random.nextInt(values.size() + 1);