-1

我有以下代码,但有时我会java.lang.ArrayIndexOutOfBoundsException使用subject.gets. 我不知道这怎么可能发生,但它确实发生了。我有一些多线程正在进行,但这个数组是函数本地的,不能从其他任何地方访问。

// Within onCreate
Random random = new Random();

// some where else
List<Subject> subjects = new ArrayList<Subject>();

// There is SOME CODE HERE TO ADD ELEMENTS.
// There is SOME CODE HERE TO ADD ELEMENTS.
// There is SOME CODE HERE TO ADD ELEMENTS.
// There is SOME CODE HERE TO ADD ELEMENTS.
// There is SOME CODE HERE TO ADD ELEMENTS.

subjects.get(random.nextInt() % subjects.size())
4

2 回答 2

6

如果 random.nextInt() 返回一个负整数,则 mod 操作的结果将为负数。

有关可能的解决方案,请参阅评论。

于 2013-04-04T18:04:44.143 回答
2

文档

nextInt()操作将返回您

所有 2 32 个可能的 int 值

这也包括负值,这就是导致您索引超出范围的原因

你可以做些什么来解决这个问题是使用nextInt(int n)

nextInt(int n)操作将返回您:

返回一个伪随机、均匀分布的 int 值,介于 0(包括)和指定值(不包括)之间,取自该随机数生成器的序列。

这将保证您随机数是正值

于 2013-04-04T18:09:20.067 回答