![](/img/trans.png)
[英]hibernate - Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
[英]“Exception in thread ”main“ java.lang.IndexOutOfBoundsException: Index: 0, Size: 0” with ArrayList?
“線程“main”中的異常 java.lang.IndexOutOfBoundsException: Index: 0, Size: 0” 是我編譯此方法時遇到的主要錯誤:
public static ArrayList<ArrayList<Integer>> createSparseArray(int len, double den) {
int counter = 0;
ArrayList<Integer> placeHolder = new ArrayList<Integer>();
for (int j = 0; j < len; j++) {
double randomNumber = Math.random();
if (randomNumber < den) {
counter++;
placeHolder.add(j);
}
}
ArrayList<ArrayList<Integer>> list = new ArrayList<ArrayList<Integer>>();
for (int k = 0; k < counter; k++) {
for (int m = 0; m < 2; m++) {
list.get(0).set(placeHolder.get(k), (int) (Math.random() * (99999) + 1));
}
}
return list;
}
我怎樣才能解決這個問題?
ArrayList<ArrayList<Integer>> list
在第 (0) 個位置不包含任何元素,並且編譯器在迭代時在指定位置找不到任何元素時拋出越界異常。
當你嘗試執行list.get(0).set(placeHolder.get(k), (int) (Math.random() * (99999) + 1));
聲明,您的列表中不包含任何元素。 您需要遍歷內部列表為設置的值list
。
不要在不存在的元素上使用list.set(index, element)
,因為它用新元素替換舊(不存在)元素並返回舊元素。 相反,使用list.add(index, element)
它將起作用。
我想你在這里有錯誤
列表。 get(0) .set(placeHolder.get(k), (int) (Math.random() * (99999) + 1));
java.util.ArrayList.get(int index) 方法返回此列表中指定位置的元素。
您僅設置為列表數組中的第一個元素
在這里,主要問題是數組索引和真正的邏輯索引的區別......
從ArrayList不以索引 0開始的事實開始
* 但是在您的邏輯中,當您使用X.add("Y")和 i = 0 時,邏輯無法找到位置 0 或無法恢復位置元素 0; *
這意味着......它顯示出站索引錯誤;
解決方案 ;
第一個解決方案:使用i< i而不是i<=第二種解決方案:使用i = 1代替i = 0進行初始化;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.