【问题标题】:Array List Loop Out of Bounds数组列表循环越界
【发布时间】:2012-12-12 14:47:57
【问题描述】:

我有这段代码,我正在下面开发。我想遍历两个数组列表,第一个列表我想查看每个条目,第二个列表我只想查看每个第三个条目并查看它们是否匹配。如果它们确实匹配,那么我想比较第二个列表中的其他两个条目。代码的问题在于“int result1 =”行,我不明白为什么它会说越界。非常感谢任何帮助!

for (int i = 0; i < array1.size(); i++){
    for (int j = 3; j <array2.size(); j = j + 3) {
        if ((array1.get(i)).equals(array2.get(j-3))){
            int result1 = array2.get(j-1).compareTo(array2.get(j-2));
        }
    }
}

【问题讨论】:

  • 错误报告。您报告的代码永远不会触发索引越界。你分享了一切吗?
  • 是的,def 是,这是错误,它返回 int result1.... 线程“main”中的异常 java.lang.IndexOutOfBoundsException:
  • 如果我注释掉 int 结果行,它工作正常,没有错误
  • 这个错误可能是你使用 j-index 进行魔术操作
  • @Caz。你真的错过了一些东西。你错过了在这里发布你的真实代码。因为显示的代码不会抛出你所说的异常。

标签: java loops arraylist compareto


【解决方案1】:

这是一个扩展评论,而不是答案。

很明显,发布的代码不能产生所述异常。还有其他事情正在发生。您需要准备一个产生异常的Simple, Self-Contained, Correct Example。这是一个基于您发布的代码的程序示例,它不会重现问题。您需要发布类似的内容,但有足够的实际代码来获取异常。

import java.util.ArrayList;
import java.util.List;

public class Test {
  public static void main(String[] args) {
    List<Integer> array1 = new ArrayList<Integer>();
    List<Integer> array2 = new ArrayList<Integer>();
    for (int i = 0; i < 100; i++) {
      array1.add(0);
      array2.add(0);
    }
    int result = 0;
    for (int i = 0; i < array1.size(); i++) {
      for (int j = 3; j < array2.size(); j = j + 3) {
        if ((array1.get(i)).equals(array2.get(j - 3))) {
          int result1 = array2.get(j - 1).compareTo(array2.get(j - 2));
          result += result1;
        }
      }
    }
    System.out.println(result);
  }
}

【讨论】:

  • 我所做的是我已经完全去掉了抛出异常的那条线,并用一些 if 语句代替了它,而不是使用比较,现在可以完美地工作了。无论如何,感谢您的所有时间!