【问题标题】:Index Out of Bound Exception Occurence索引越界异常发生
【发布时间】:2012-08-23 14:33:22
【问题描述】:

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

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

copyppList.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); 

如何避免这种情况?
可以添加什么条件来防止错误?

【问题讨论】:

    标签: java exception indexoutofboundsexception


    【解决方案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.
    }
    

    【讨论】:

    • 我需要copyedppList.size() 不能做copyppList.size() -1
    • @simpy,循环的目的是什么?
    • 循环必须重复复制到ppList.size(),它还有一些其他的逻辑要做
    【解决方案2】:

    删除 +1。

    DomainItemFieldHistory oldValue = copiedppList.get(domainData)

    【讨论】:

    • 在某些情况下我需要增加的数据,所以我必须添加 +1
    【解决方案3】:

    你需要做出改变:

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

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

        copyppList.size()的大小为1

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

        留着.get(domainData);

        【讨论】:

          【解决方案6】:

          自从

          copyedppList.size() 是0

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

          copiedppList.get(domainData + 1); 
          

          domainData == 0

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

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2018-11-19
            • 2013-03-30
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-01-31
            • 2015-12-08
            • 2011-10-08
            相关资源
            最近更新 更多