有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java这两段代码之间的区别是什么?

第一个例子

int windowStart = 0;

for (int i = 0; i + windowSize < fileArray.size(); i++) {
  ArrayList <Character> window = new ArrayList <Character> ();
  for (int s = windowStart; s <= windowStart + windowSize; s++) {
    window.add(fileArray.get(s));
  }
  windowStart++;
}

第二个例子

int ind = 0;
for (int i = 0; i + windowSize < fileArray.size(); i++) {
  for (int b = ind; b <= windowSize + ind; b++) {
    window.add(fileArray.get(b));
  }
  ind++;
}

第一个抛出一个java.lang.IndexOutOfBoundsException,而第二个则没有,而且工作正常fileArray对两者都是一样的,但对2来说是一样的。window数组被定义为一个属性,而对于第一个数组,“窗口”数组是在方法(和for循环)内部定义的。这有区别吗


共 (2) 个答案

  1. # 1 楼答案

    从第一个例子,从你告诉我的:

    • windowSize=30
    • fileArray.size()=235

    然后,您的第一个for循环将在i + windowSize > 235(这意味着i=236-30=206`)时终止

    你会意识到windowStart在第一个for-loop内递增,所以最终windowStart会递增205倍(从0开始)

    此时,第二个for-loop将计数(windowStart = 205),你的条件s <= windowStart + windowSize将是(s = 205 + 30,等于235),它满足循环中的条件,你说fileArray.get(s),这意味着,fileArray.get(235),你得到一个IndexOutOfBoundsException

    我假设第二个例子中的windowSize是不一样的,但是在我看到完整的源代码之前,我不能告诉你这一点

    希望这有帮助

  2. # 2 楼答案

    在列表中添加值时,无法获得IndexOutOfBoundsException。问题是s的值等于或大于fileArray数组或列表的实际大小

    因为这两个例子中的循环是等价的,所以问题应该在您刚刚发布的代码行之外找到

    如果您使用的是IDE,请尝试调试(在IndexOutOfBoundsException上中断),否则请添加一些简单的System.out.println语句,以找出s大于预期的原因