“线程中的异常”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;
}
我该如何解决这个问题?
答案 0 :(得分:5)
ArrayList<ArrayList<Integer>> list
不包含第(0)个位置中的任何元素,并且当迭代器在指定的位置找不到任何元素时,编译器会抛出超出范围的异常。
当您尝试执行list.get(0).set(placeHolder.get(k), (int) (Math.random() * (99999) + 1));
语句时,您的列表中不包含任何元素。您需要迭代内部列表以设置list
的值。
答案 1 :(得分:4)
不要在不存在的元素上使用list.set(index, element)
,因为它用新的元素替换旧的(不存在的)元素并返回旧的元素。相反,请使用list.add(index, element)
,它会起作用。
答案 2 :(得分:0)
我在这里有错误
list。 get(0) .set(placeHolder.get(k),(int)(Math.random()*(99999)+ 1));
java.util.ArrayList.get(int index)方法返回此列表中指定位置的元素。
您只是设置列表arrray中的第一个元素
答案 3 :(得分:0)
这里,主要问题是数组索引和实际逻辑索引的区别...
以 ArrayList 不以索引0开始的事实开始
* 但是在您的逻辑中,当您使用i = 0的 X.add(“ Y”)时,逻辑找不到位置0或无法恢复位置元素0; *
这意味着...它显示出站索引错误;
解决方案;
第一个解决方案:使用 i << / strong>代替 i <= 第二种解决方案:使用 i = 1 进行初始化,而不是 i = 0;