在下面的代码中我收到以下错误:
java.lang.IndexOutOfBoundsException: Index: 1, Size: 1
对于copiedppList.size()
,大小为1for (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);
我怎样才能避免这种情况? 可以添加什么条件来防止错误?
答案 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) {