【问题标题】:Index Out Of Bound Exception Invalid index 16, size is 15 [duplicate]Index Out Of Bound Exception Invalid index 16, size is 15 [重复]
【发布时间】:2017-02-03 20:35:30
【问题描述】:

我编写了一些代码来逐步将大量图片加载到图像视图中。但是如果我运行代码,我会得到 Index Out of Bound Exception: Invalid index 16, size is 15

这是我的代码

int steps = 5;
int tmp = 0;
for (int j = 0; j < imageUrl.size(); j++) {
    if (imageUrl.size() < steps) {
        for (int i = 0; i < imageUrl.size(); i++) {
            buildPicture(imageUrl.get(tmp));
            imageUrl.remove(tmp);
            tmp++;
        }
    } else if (imageUrl.size() >= steps) {
        for (int i = 0; i < steps; i++) {
            buildPicture(imageUrl.get(tmp));
            imageUrl.remove(tmp);
            tmp++;
        }
    }
}

拜托,你能帮我修复我的代码吗?

【问题讨论】:

  • 您是否尝试过使用调试器单步执行您的代码?
  • 从这段代码中不清楚你期望tmp 的价值是什么——你想用它来实现什么?您是否考虑过在外部循环的第二次迭代开始时会发生什么?
  • 是的,例如,我尝试使用大小为 24 的 imageUrl,循环在 12 次运行后终止。
  • 我有一个 X 项的 ArrayList。我想要的也是拿 5 个项目并将它们放入 imageView 中。循环应该重复直到 ArrayList 结束。我认为 tmp 是我对 ArrayList 的索引。
  • 不确定您要做什么,但请注意 t 仅在循环之前设置为 0。这就是你的意思吗?

标签: java for-loop indexoutofboundsexception


【解决方案1】:

当 size 等于 15 时,最后一个元素的索引为 14,因为第一个元素的索引始终为 0。

【讨论】:

  • 我该如何解决?以及为什么循环在 ArrayList 中途终止。我尝试使用大小为 24 和 19 的 ArryList。循环在 12 和 10 后终止
【解决方案2】:

试试这个,for循环少运行一次,因为数组从0而不是1开始: 编辑:我不太确定您要做什么,我不明白您为什么使用 temp 而不是循环的当前 [i] 值。试试这个,如果没有,我不确定......

   int steps = 5;
for (int j = 0; j < (imageUrl.size() - 1); j++) {
    if (imageUrl.size() < steps) {
        for (int i = 0; i < (imageUrl.size() - 1); i++) {
            buildPicture(imageUrl.get(i));
            imageUrl.remove(i);
        }
    } else if (imageUrl.size() >= steps) {
        for (int i = 0; i < steps; i++) {
            buildPicture(imageUrl.get(i));
            imageUrl.remove(i);
            i++;
        }
    }

}

【讨论】:

  • 感谢您的提示。我试过了,但如果我运行代码,我会得到:java.lang.IndexOutOfBoundsException: Invalid index 9, size is 9
  • 它说的是“某物”的索引还是“某物”的大小?
  • 不,抱歉。这是日志:进程:com.example.dudi.myidea,PID:25617 java.lang.IndexOutOfBoundsException:索引 11 无效,大小为 11 在 java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255) 在 java.util .ArrayList.get(ArrayList.java:308) 在
【解决方案3】:

假设 imageUrl 的大小为 24,就像您在上面的评论中一样。你得到一个越界异常,因为 tmp 最终变成一个大于 24 的值,当你尝试调用 imageUrl.get(tmp) 时,你试图获取一个不存在的元素,因此抛出异常。

我不完全确定你想在这里做什么,但我希望这会有所帮助。

【讨论】:

    【解决方案4】:

    关于请求发布MCVESSCCE 背后原因的简短演示。像这样的 MCVE:

    public static void main(String[] args){
    
        //use a variable instead of imageUrl.size()
        int imageUrlsize = 15;
        int steps = 5;
        int tmp = 0;
        for (int j = 0; j < imageUrlsize; j++) {
            if (imageUrlsize < steps) {
                for (int i = 0; i < imageUrlsize; i++) {
                    System.out.println("imageUrlsize < steps " + tmp);
                    tmp++;
                }
            } else if (imageUrlsize >= steps) {
                for (int i = 0; i < steps; i++) {
                    System.out.println("imageUrlsize >= steps "+ tmp);
                    tmp++;
                }
            }
        }
    }
    

    非常清楚,对于大小为 15 的 imageUrltmp 增长到 74。

    【讨论】:

      猜你喜欢
      • 2016-08-12
      • 2018-12-10
      • 2021-02-06
      • 2017-04-09
      • 1970-01-01
      • 2021-05-07
      • 1970-01-01
      • 2018-08-01
      • 2020-02-01
      相关资源
      最近更新 更多