我有以下代码,但有时我会在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())
答案 0 :(得分:6)
如果random.nextInt()返回负整数,则mod操作的结果将为负。
请参阅有关可能解决方案的评论。
答案 1 :(得分:2)
来自doc:
nextInt()
操作会返回
所有2 32 可能的int值
这还包括否定值,这就是导致你有索引超出界限的原因
您可以采取的措施是使用nextInt(int n)
nextInt(int n)
操作会返回给您:
返回一个伪随机数,在0之间均匀分布的int值 (包括)和指定值(不包括),由此得出 随机数发生器的序列。
这将保证您随机数是正值。