通过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;
}
}
}
}
答案 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+1
或Array
。由于你的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)) {
当i
为seq.length - 1
时,无法访问数组末尾之外的元素。
这样的另一条线在else分支中。
答案 5 :(得分:1)
很明显,当你传递一个数组(即数组包含10个元素)并在内部循环中运行时,正确的。但是当你访问seq[i+1]
时,你可能正在访问索引而不是在数组中可用。
当i
值达到10并且您尝试访问i+1
时,但此索引不在数组中(因为我们知道数组大小为10)
所以,它引起了这个例外。 希望它会对你有所帮助。