Java ArrayIndexOutofBounds异常:

Java ArrayIndexOutofBounds异常:,java,Java,帮我解决这个错误。这个代码是针对Gutherine系列的。考虑下面的算法 从正数n开始 如果n为偶数,则除以2 如果n为奇数,则乘以3并加1 继续此操作,直到n变为1 public class Gutherine { public static void main(String[] args) { int a[] = {8, 3,2, 1}; int result = isGutherineSequence(a); System.o

帮我解决这个错误。这个代码是针对Gutherine系列的。考虑下面的算法 从正数n开始 如果n为偶数,则除以2 如果n为奇数,则乘以3并加1 继续此操作,直到n变为1

   public class Gutherine {

    public static void main(String[] args) {
        int a[] = {8, 3,2, 1};
        int result = isGutherineSequence(a);
        System.out.println(result);
    }

    public static int isGutherineSequence(int a[]) {
        int i = 0;
        int t = 0;
        for (i = 0; i < 4; i++) {
            if (a[i] % 2 == 0) {
                if (a[i + 1] == a[i] / 2) {
                    t++;
                }
            } else if (a[i + 1] == a[i] * 3 + 1) {
                t++;
            }
        }
        if (t == 3) {
            return 1;
        } else {
            return 0;
        }
    }
    }
public-class-Gutherine{
公共静态void main(字符串[]args){
int a[]={8,3,2,1};
int结果=isGutherineSequence(a);
系统输出打印项次(结果);
}
公共静态int-isGutherineSequence(int a[]){
int i=0;
int t=0;
对于(i=0;i<4;i++){
如果(a[i]%2==0){
如果(a[i+1]==a[i]/2){
t++;
}
}else如果(a[i+1]==a[i]*3+1){
t++;
}
}
如果(t==3){
返回1;
}否则{
返回0;
}
}
}

因为在循环中您访问了
a[i+1]
,所以您应该迭代
i
,直到下一个到最后一个元素,所以更改

for (i = 0; i < 4; i++)

由于在循环中您访问
a[i+1]
,因此您应该迭代
i
,直到下一个到最后一个元素,所以更改

for (i = 0; i < 4; i++)

此异常是由于您引用了

a[i + 1]

如果[i]可以是数组的任何元素,[i+1]可以是最右边元素的右边。因此,在这种情况下,您的数组索引将超出范围。

异常是由您引用

a[i + 1]

如果[i]可以是数组的任何元素,[i+1]可以是最右边元素的右边。因此,在这种情况下,数组索引将是越界的。

越界异常是由间接
a[i+1]
导致的,即使
i
是奇数。
isGutherineSequence
函数中的循环将使
i
达到3,并且出现问题的行

} else if (a[i + 1] == a[i] * 3 + 1) {
将有效地尝试提取不存在的
a[4]


您应该在前一个位置停止循环,或者为最后一个元素提供备用测试。

即使在
i
为奇数时,间接
a[i+1]
也会导致越界异常。
isGutherineSequence
函数中的循环将使
i
达到3,并且出现问题的行

} else if (a[i + 1] == a[i] * 3 + 1) {
将有效地尝试提取不存在的
a[4]


您应该在前一个位置停止循环,或者为最后一个元素提供备用测试。

只有在循环运行期间可以不接触最右边的数组元素时才能解决问题。这里的情况似乎不是这样。@La comadreja在您访问
a[i+1]
时,在循环的最后一次迭代中会检查最右边的数组元素。只有在循环运行期间不接触最右边的数组元素可以解决问题时,它才能解决问题。这里的情况似乎不是这样。@La comadreja在您访问
a[i+1]
时,在循环的最后一次迭代中检查最右边的数组元素。