Я реализую двоичный поиск для двух массивов. Когда я запускаю свой код, он дает мне ошибку ArrayIndexOfBoundException: 11 строка 23, где проверяется условие if (a [m] == key). Я не совсем понимаю, что это неправильно реализовано в моем коде. Пожалуйста, помогите исправить ошибкуArrayIndexOfBoundException в двоичном поиске
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
int n = s.nextInt();
int[] a = new int[n + 1];
int i, j;
for (i = 0; i != a.length-1; i ++)
a[i] = s.nextInt();
int k = s.nextInt();
int[] b = new int[k+1];
for (j = 0; j != b.length-1; j++)
b[j] = s.nextInt();
int l = 0;
int r = a.length-1;
j = 0;
int key = b[j];
int m = 0;
while(l <=r && j!=b.length-1){
m = (l+r)/2;
if (a[m] == key){
System.out.println(m+1);
j++;
if (j != b.length-1)
key = b[j];
}
else if (a[m] > key) r = m -1;
else if (a[m] < key) l = m + 1;
if (l > r){
System.out.println("-1");
j++;
if (j != b.length-1)
key = b[j];
l = 0;
r = a.length-1;
}
}
}
}
Вы знаете, что у вас могут быть имена переменных с несколькими буквами, верно? – kviiri
Что вы понимаете по этому исключению «ArrayIndexOfBoundException»? – Braj
Вам нужно решить, должна ли ваша верхняя граница быть * включительно * или * эксклюзивной *. Похоже, что это должно быть эксклюзивным, если вы начинаете с того, что это 'a.length', но условие' l <= r' предполагает, что оно включено. –