带有/ for循环的Java数组索引超出边界异常

时间:2014-02-03 17:55:41

标签: java arrays indexoutofboundsexception

通过for循环迭代数组时,我得到一个数组索引超出范围异常。有人能告诉我为什么会发生这种情况我已经将for-loop中的布尔值设置为i

public static boolean verify(int [] seq ){
  for (int i=0; i<seq.length; i++){

  //If the number is even, the next number
  //must the half the previous number
  if (seq[i] %2==0){
    if (seq[i+1] != (seq[i]/2)){
      return false;
    }
  }

  //If the number is positive, the next number
  //must be 3 times + 1 the previous number
  else if (seq[i] %2!=0){
    if (seq[i+1] != ((seq[i])*3+1)){
      return false;
    }
  }

}

}

6 个答案:

答案 0 :(得分:1)

问题在于您访问索引i+1。如果i是最后一个可能的值(seq.length - 1),则i+1是超出数组末尾的值,结果为ArrayIndexOutOfBoundsException

通过将条件修改为:

,先停止for循环一次迭代
i < seq.length - 1

答案 1 :(得分:1)

您将面临i bcoz的最大值的异常,您将值增加1以查找索引值。

    if (seq[i] %2==0){
            if (seq[i+1] != (seq[i]/2)){
---------------------^
              return false;
            }
          }

答案 2 :(得分:1)

您正在尝试访问位置i+1Array。由于你的for循环一直持续到最后一个元素,你将尝试在最后一个元素之后访问1个位置,这是导致Out Of Bounds异常的原因。

答案 3 :(得分:1)

您正在迭代数组中的所有元素,但检查seq[i + 1]元素i == seq.lenth - 1将始终导致异常。最后一个数字完全受您的条件限制,因此无需检查。按如下方式运行循环:for (int i=0; i <seq.length - 1; i++)

答案 4 :(得分:1)

此:

    if (seq[i+1] != (seq[i]/2)) {
iseq.length - 1时,

无法访问数组末尾之外的元素。

这样的另一条线在else分支中。

答案 5 :(得分:1)

很明显,当你传递一个数组(即数组包含10个元素)并在内部循环中运行时,正确的。但是当你访问seq[i+1]时,你可能正在访问索引而不是在数组中可用。

i值达到10并且您尝试访问i+1时,但此索引不在数组中(因为我们知道数组大小为10)

所以,它引起了这个例外。 希望它会对你有所帮助。