У меня есть отсортированный массив контактов, и у каждого объекта есть имя (строка) и номер телефона (длинный). Я использую метод двоичного поиска, который возвращает индекс контакта с тем же номером, который вводит пользователь. Несмотря на то, что мой двоичный поиск занимает длинный параметр as, когда я вызываю метод, он обрабатывает его как int. Итак, если я поставлю число, превышающее предел int max, я получаю сообщение об ошибке, указывающее, что целое число слишком длинное.
Я просто тестировал свой код, пытаясь запустить метод с номером телефона из массива
System.out.println(binarySearch(contacts,9077867820,0,1000));
И выдает ошибку "целое слишком большое". Когда я пробую снова с числом, меньшим, чем предел int max, вот так:
System.out.println(contacts[binarySearch(contacts,1171652637,0,1000)]);
Он возвращает индекс контакта в массиве.
Вот мой метод:
public static int binarySearch(Contact[] A, long key, int low, int high)
{
int rangeSize = (high-low) + 1;
int mid = (high+low)/2;
if(key==A[mid].getNum()) return mid;//found it, no further recursion needed
else if(rangeSize==1) return -1;//not in array
if (key<A[mid].getNum()) return binarySearch(A, key, low, mid);
else return binarySearch(A, key, mid+1, high);
}
Почему он все еще ожидает int, когда ключ объявлен как long?