Я реализую алгоритм Карацубы и сталкиваюсь с этим исключением.
Некоторый соответствующий код (при необходимости я могу опубликовать больше):
Из основного:
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. Вот пример ввода, который используется для загрузки 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]);
Что привело к этому результату — так что значения загружаются так, как я намеревался.
Итак, к какому массиву я обращаюсь с 0, который неправильно инициализирован? Или есть другая проблема, которую я не понимаю?