-2

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

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

复制的ppList.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); 

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

4

6 回答 6

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.
}
于 2012-08-23T14:35:17.513 回答
1

删除 +1。

DomainItemFieldHistory oldValue = copiedppList.get(domainData)

于 2012-08-23T14:35:26.660 回答
1

你需要做出改变:

  • 要么get(domainData + 1);=>get(domainData);
  • for (int domainData = 0; domainData < copiedppList.size(); domainData++)=>for (int domainData = 0; domainData < copiedppList.size() - 1; domainData++)

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

于 2012-08-23T14:35:28.637 回答
1

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

于 2012-08-23T14:35:45.167 回答
1

复制的ppList.size() 的大小为1

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

留着它.get(domainData);

于 2012-08-23T14:37:53.633 回答
1

自从

复制的ppList.size() 是0

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

copiedppList.get(domainData + 1); 

什么时候domainData == 0

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

if (domainData == 0 && copiedppList.size() > 1) {
于 2012-08-23T14:43:00.703 回答