我正在实现一个Karatsuba算法,并且遇到了这个异常。

一些相关的代码(如果需要,我可以发布更多内容):

从主要:

int degree = (input.nextInt() + 1);
int A[] = new int[degree];
int B[] = new int[degree];

for(int i = 0; i < degree; i++)
    A[i] = input.nextInt();
for(int i = 0; i < degree; i++)
    B[i] = input.nextInt();
product = karatsuba(A, B, degree); // LINE 22


从唐津:

static int[] karatsuba(int[] A, int[] B, int degree) {

    int[] A_hi = new int[degree / 2];
    int[] A_lo = new int[degree / 2];
    int[] B_hi = new int[degree / 2];
    int[] B_lo = new int[degree / 2];

    int[] m1 = new int[degree / 2];
    int[] m2 = new int[degree / 2];

    for(int i = (degree / 2); i < degree; i++) {
        A_hi[i - degree / 2] = A[I]; // LINE 50
        B_hi[i - degree / 2] = B[i];
        System.out.println(A_hi[i - degree / 2] + " " + A[i] + "   " + B_hi[i - degree / 2] + " " + B[i]);
    }

    for(int i = 0; i < (degree / 2); i++) {
        A_lo[i] = A[i];
        B_lo[i] = B[i];
        m1[i] = A_lo[i] + A_hi[i];
        m2[i] = B_lo[i] + B_hi[i];
    }

    int[] r = new int[(degree * 2) - 1];
    int[] r_m = karatsuba(m1, m2, (degree / 2)); // LINE 63
    int[] r_lo = karatsuba(A_lo, B_lo, (degree / 2));
    int[] r_hi = karatsuba(A_hi, B_hi, (degree / 2));


从那里,我将r_数组加载到r []中以返回到main。
Here is a sample input用于加载A []和B []。
我正在使用数组进行多项式乘法,值是系数。

我对这个异常不是很熟悉,但是据我了解,ArrayIndexOutOfBoundsException:0表示当索引在数组的边界中不存在时,我正在尝试使用索引0访问数组。

我的困惑是,对于A []和B [],我验证了输入是否获得了正确的数字,因此已对其进行了初始化并且其值最高为度。对于A_hi和B_hi,我初始化数组,然后逐一加载值。我检查了一下这行将什么值加载到A_hi []和B_hi []中:

System.out.println(A_hi[i - degree / 2] + " " + A[i] + "   " + B_hi[i - degree / 2] + " " + B[i]);


Which led to this output-因此将按我的意图加载值。

那么我要使用未正确初始化的0访问哪个数组?还是我不了解另一个问题?

Here is the full error list

最佳答案

您的代码易于执行越界数组访问。具体来说,请考虑以下简化形式:

int[] A_hi = new int[degree / 2];

for(int i = (degree / 2); i < degree; i++) {
    A_hi[i - degree / 2] = 1;
}


数组A_hi具有degree / 2元素,您可以设置degree - degree / 2元素。但是,如果degree的值是奇数,则degree - degree / 2degree / 2大1,因此您在上一次迭代中超出了数组范围。特别是,如果degree == 1则只有一个迭代,其中i == 0,并且A_hi的长度为零。这将产生您观察到的异常。

关于java - ArrayIndexOutOfBoundsException:Karatsuba实现中的0,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53797622/

10-09 12:35