索引超出范围的异常事件

时间:2012-08-23 14:33:23

标签: java exception indexoutofboundsexception

在下面的代码中我收到以下错误:

java.lang.IndexOutOfBoundsException: Index: 1, Size: 1

对于copiedppList.size()

,大小为1
for (int domainData = 0; domainData < copiedppList.size(); domainData++) {
    if (domainData == 0) {
        firstValue.setNewValue(firstValue.getFieldValue());
        DomainItemFieldHistory oldValue = copiedppList.get(domainData + 1);
        if (firstValue.getFieldID().equals(oldValue.getFieldID())) {
            firstValue.setOldValue(oldValue.getFieldValue());
        }
    }
}

以下行导致了上述问题:

DomainItemFieldHistory oldValue = copiedppList.get(domainData + 1); 

我怎样才能避免这种情况? 可以添加什么条件来防止错误?

6 个答案:

答案 0 :(得分:1)

将终止条件更改为copiedppList.size() - 1将阻止越界异常。

数组索引基于零,因此最后一个有效索引为size() - 1。发布的代码可以迭代到size() - 1,但会进行以下调用:

copiedppList.get(domainData + 1);

导致异常。

如果循环必须遍历所有元素,那么您需要保护+ 1调用。例如:

if (domainData < copiedppList.size() - 1)
{
    copiedppList.get(domainData + 1); // This is now safe, assuming
                                      // nothing reduces the size of
                                      // copiedppList since the if check.
}

答案 1 :(得分:1)

删除+1。

DomainItemFieldHistory oldValue = copiedppList.get(domainData)

答案 2 :(得分:1)

您需要进行更改:

  • get(domainData + 1); =&gt; get(domainData);
  • for (int domainData = 0; domainData < copiedppList.size(); domainData++) =&gt; for (int domainData = 0; domainData < copiedppList.size() - 1; domainData++)

原因:您的列表从0到大小为1,因此在循环的最后一次迭代中,您尝试调用list.get(size),因为没有这样的元素而失败。

答案 3 :(得分:1)

如果copiedppList.size() = 1,则只有索引0有效

答案 4 :(得分:1)

  

对于copiedppList.size()

,大小为1

.get(domainData + 1);会导致它在索引位置[1]询问超过指定大小的数据。

保持.get(domainData);

答案 5 :(得分:1)

由于

copiedppList.size()是0

所以在这种情况下你无法访问

copiedppList.get(domainData + 1); 

domainData == 0

您需要检查集合中是否有多个条目:

if (domainData == 0 && copiedppList.size() > 1) {