java.lang.IndexOutOfBoundsException

时间:2013-02-27 15:38:37

标签: java arraylist

我有一个返回整数数组的SQL查询。

ArrayList<Integer> intArray = new ArrayList<>(44);

while (result.next()){
   intArray.add(result.getInt("CNT"));     // Insert the result into Java Array List
}

// Insert the result into Java Object
dc = new DCDataObj(
       intArray.get(1), //    Datacenter          1000
       intArray.get(2), //    Zone                1100
       ..................
     )

运行代码时出现此错误: java.lang.IndexOutOfBoundsException: Index: 40, Size: 40

当我使用ArrayList时,你能告诉我我的错误在哪里吗?

4 个答案:

答案 0 :(得分:6)

你必须从索引0开始而不是1

dc = new DCDataObj(
intArray.get(0), //    Datacenter          1000
intArray.get(1), //    Zone                1100

答案 1 :(得分:4)

而不是

dc = new DCDataObj(
           intArray.get(1), //    Datacenter          1000
           intArray.get(2), //    Zone                1100
           ...

使用

dc = new DCDataObj(
           intArray.get(0), //    Datacenter          1000
           intArray.get(1), //    Zone                1100
           ...

由于List索引基于零(就像数组和字符串一样)。


如果我是你,我可能会提供DCDataObj的构造函数,其中List<Integer>为参数,然后您只需调用

dc = new DCDataObj(intArray);

答案 2 :(得分:2)

另一种方法是使用这样的方法:

    dc = new DCDataObj();
    for (Integer k: intArray) {
        dc.add(k);
    }

然后你可以动态添加元素。

答案 3 :(得分:1)

您正在尝试获取仅包含40个元素的数组列表的第41个元素。

请记住,与数组(以及Java中的所有索引集合)一样,索引从0开始。

你应该从:

开始
dc = new DCDataObj(
    intArray.get(0), ... , intArray.get(39) ...