"целое число слишком длинное" Ошибка, когда мой метод занимает много времени (Java) - PullRequest
0 голосов
/ 07 мая 2020

У меня есть отсортированный массив контактов, и у каждого объекта есть имя (строка) и номер телефона (длинный). Я использую метод двоичного поиска, который возвращает индекс контакта с тем же номером, который вводит пользователь. Несмотря на то, что мой двоичный поиск занимает длинный параметр 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?

1 Ответ

1 голос
/ 07 мая 2020

Когда вы пишете число как 123, это целочисленный литерал. Он может представлять числа только в целочисленном диапазоне (Integer.MIN_VALUE - Integer.MAX_VALUE).

Чтобы написать длинный литерал, добавьте суффикс L: 123L - это long и может представлять все числа в большом диапазоне (Long.MIN_VALUE - Long.MAX_VALUE).

System.out.println(((Object)123).getClass());
System.out.println(((Object)123L).getClass());

вывод:

java.lang.Integer
java.lang.Long
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...