"线程中的异常" main" java.lang.IndexOutOfBoundsException:Index:0,Size:0"使用ArrayList?

时间:2014-10-09 07:20:02

标签: java 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;
}

我该如何解决这个问题?

4 个答案:

答案 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;