【问题标题】:"Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 0, Size: 0" with ArrayList?“线程“主”java.lang.IndexOutOfBoundsException 中的异常:索引:0,大小:0”与 ArrayList?
【发布时间】:2014-10-09 07:20:01
【问题描述】:

“线程“main”java.lang.IndexOutOfBoundsException中的异常:索引:0,大小: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;
}

我该如何解决这个问题?

【问题讨论】:

  • 新的list 中不包含任何项目。 list.get(0) 将导致异常。先在list中添加空的ArrayList再使用。

标签: java arraylist


【解决方案1】:

ArrayList&lt;ArrayList&lt;Integer&gt;&gt; list 不包含第 (0) 个位置中的任何元素,并且当在指定位置中找不到任何元素时,编译器会在迭代时抛出越界异常。

当您尝试执行 list.get(0).set(placeHolder.get(k), (int) (Math.random() * (99999) + 1)); 语句时,您的列表中不包含任何元素。您需要迭代内部列表以设置list 的值。

【讨论】:

  • OP 在哪里迭代空列表?迭代空列表不会抛出此异常。
  • 重新框定这一行迭代空列表的异常
【解决方案2】:

不要在不存在的元素上使用list.set(index, element),因为它会用新元素替换旧的(不存在的)元素并返回旧元素。相反,请使用list.add(index, element),它会起作用。

【讨论】:

    【解决方案3】:

    我觉得你这里有错误

    list.get(0).set(placeHolder.get(k), (int) (Math.random() * (99999) + 1));

    java.util.ArrayList.get(int index) 方法返回此列表中指定位置的元素。

    您只设置列表数组中的第一个元素

    【讨论】:

      【解决方案4】:

      这里,主要问题是数组索引和真实逻辑索引的区别……

      ArrayList 不开始索引为 0 的事实开始

      * 但是在您的逻辑中,当您将 X.add("Y") 与 i = 0 一起使用时,逻辑无法找到位置 0 或无法恢复位置元素 0; *

      这意味着...它显示出站的索引错误;

      解决方案;

      第一个解决方案:使用 i 而不是 i 第二种解决方案:使用 i = 1 进行初始化,而不是 i = 0;

      【讨论】:

        猜你喜欢
        • 2016-01-12
        • 1970-01-01
        • 2013-11-22
        • 1970-01-01
        • 2013-07-29
        • 1970-01-01
        • 2016-12-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多