Рассмотрим случай:
a = [100, 200, 300, 400, 500]
b = 200
В вашем коде int mid = a[a.length-1]-a[0]/2;
присвоит mid
значение как 500-100/2 = 450
.
Я вижу, что в нескольких местах в вашем коде впереди вы используете a[mid]
, что означает, что вы просите извлечь элемент a
по индексу 450. Однако в вашем массиве всего 5 элементов.
По сути, вы работаете со значениями в массиве, когда должны работать с индексами.