【问题标题】:IndexOutOfBounds ArrayList errorIndexOutOfBounds ArrayList 错误
【发布时间】:2018-04-16 16:58:41
【问题描述】:

所以我有两个数组列表,一个是多维的,另一个只是一个数组列表。我似乎一直出现越界错误:

线程“主”java.lang.IndexOutOfBoundsException 中的异常:索引:1,大小:1 在 java.util.ArrayList.rangeCheck(未知来源) 在 java.util.ArrayList.get(未知来源) 在 is15147029.main(is15147029.java:303)

我不知道为什么,我在这里所做的是将另一个数组中的整数输入到数组列表中。我已经检查过该数组是否充满了整数,但是每当我尝试将整数添加到数组列表中时,都会出现错误。

ArrayList<Integer> selOrd = new ArrayList<Integer>();
    ArrayList<ArrayList<Integer>> ordIndex = new ArrayList<ArrayList<Integer>>();
    for(int i = 0; i < finalCost.length; i++) {
        int lowCost = 0;
        if(finalCost[i] > lowCost) {
            lowCost = finalCost[i];
            selOrd.add(0, finalCost[i]);
        }
        else if(finalCost[i] <= lowCost ) selOrd.add(finalCost[i]);
    }
    //Get Average Fitness Cost
    for(int i = 0; i < finalCost.length; i++) total = total + finalCost[i];
    avg = total/(finalCost.length);
    //Sort into s1, s2, s3
    for(int i = 0; i < selOrd.size(); i++) {
        if(selOrd.get(i) > avg) ordIndex.get(0).add(selOrd.get(i));
        if(selOrd.get(i) == avg) ordIndex.get(1).add(selOrd.get(i));
        if(selOrd.get(i) < avg) ordIndex.get(2).add(selOrd.get(i));
    }

将整数添加到 selOrd 时似乎出现错误。

Ant 帮助将不胜感激,我的代码中的另一个数组列表也有类似的问题。谢谢

【问题讨论】:

  • 你为什么在1开始你的柜台? ArrayList 索引从 0 开始。
  • 对不起,我的意思是改变它,只是测试一些东西
  • 您是否仍然遇到该异常?堆栈跟踪会为您提供行号。
  • 是的,行号是:if(selOrd.get(i) == avg) ordIndex.get(1).add(selOrd.get(i));
  • 这意味着,selOrd 中只有一个元素,您正在尝试访问索引 1 元素(不存在的第二个元素)。

标签: java arrays arraylist indexoutofboundsexception


【解决方案1】:

问题很可能是硬编码索引值的结果。 特别是get(1)get(2)

您必须验证 ordIndex.size() &gt;= 3 在 为了安全地执行get(2)ordIndex.size() &gt;= 2 安全执行get(1)

另外, 注意错误信息。 异常明确指出index 1, size 1

如果数组的大小是一个元素,那么任何访问数组中第二个元素(索引值为 1)的尝试都必须失败。

【讨论】:

  • 我不太明白你想改变什么。我看到你想验证它应该是一定的长度,但它是一个多维数组列表,所以它不会保持缩放吗?
  • 问题是当列表只有一个元素时,您正在调用get(1)(访问列表中的第二个元素)。
【解决方案2】:

乍一看您的代码,我没有看到您在 ArrayLists 的 ordIndex ArrayList 中添加任何内容,因此每次 get 调用都会引发异常。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-24
    • 1970-01-01
    • 2012-09-14
    • 1970-01-01
    • 2017-12-24
    • 1970-01-01
    • 2019-03-31
    相关资源
    最近更新 更多