我有一个对象列表,每个对象都有一些'qid'。 qid
是整数。列表的'qid'从任何没有说'min'开始,到任何没有说'max'结束。请注意,列表中对象的“qid”不是连续的。意思是说例如:min = 6和max = 31但是这里只有16个对象,他们的qid在[min,max]
(min和max都包括在内)因此没有任何对象存在而没有(31-6) +1)-16 = 10个qids。具有这十个qids的手段,没有任何对象存在。但是,只有16个对象存在有效的qid。
现在我有一个大小为10的int数组,我想在其中随机存储十个对象但是有效的qid。意味着这十个对象必须来自那些16个而不是来自那些对象。
我正在做以下
for (int j = 0; j < 10; j++) {
checkList[j] = min + (int) (Math.random() * ((max - min) + 1));
if (qidList.get(checkList[j]) == null ) {
j--;
continue;
} else {
finalList.add(j,qidList.get(checkList[j]));
}
}
我得到了indexoutofboundsexception
。有人能帮助我吗?
答案 0 :(得分:0)
由于你在for循环中递减j,你可能会超过0(即-1和更高),这就是抛出indexOutOfBounds
编辑:
基于错误发生在“qidList.get(checkList [j])== null”行的注释,然后显然qidList没有checkList [j],这意味着上面的行“checkList [j] = min +(int)(Math.random()*((max - min)+ 1));“被设置为超出qidList大小的值!
将checkList [j]的值打印出来进行调试!
答案 1 :(得分:0)
从您的评论(现在显然已删除)中,问题似乎是qidList.get
,好像问题出在checkList[j]
,它会在之前的行上抛出异常。因此,检查max是否小于qidList的大小。如果没有,您可以在get方法上获得以下IndexOutOfBoundsException。来自List API:
IndexOutOfBoundsException - if the index is out of range (index < 0 || index >= size())
<强>更新强> 为了防范这种情况,请将其更改为以下内容:
if ((checkList[j] >= qidList.size()) || (qidList.get(checkList[j]) == null)) {
j--;
continue;
}
或者更好的是,在进入循环之前将max
设置为qidList.size() - 1