Двоичный поиск списка значений с десятичными и обычными целыми числами

{
public static final int NOT_FOUND = -1;
public static int binarySearch(Integer[] a, int x)
{
    int low=0;
    int high = a.length - 1;
    int mid;
    while (low <= high)
    {
        mid = (low + high) / 2;
        if (a[mid].compareTo(x)<0)
        low = mid + 1;
        else if (a[mid].compareTo(x) > 0)
        high = mid - 1;
        else 
        return mid;
    }
    return NOT_FOUND;
}
public static void main(String[] args)
{
    int SIZE = 8;
    Integer[] a = {-3,10,5,24,18.5,10.5};
    System.out.println("18.5 found at " +binarySearch(a, 18.5));
}

Как мне сделать так, чтобы десятичные числа 18,5 и 10,5 не разрушали программу? Я понимаю, что Integer[] не может работать с десятичными числами, но я не знаю, нужен ли мне другой список, Integer с обычными числами, и плавающие с десятичными. Если так, то я тоже не уверен, как создать два таких списка. Спасибо за любую помощь

1 ответ

Java позволяет передавать массив скажем Integer или Double методу, который ожидает массив объектов Number.

Поэтому одним из простых решений было бы изменить ваш метод поиска, чтобы принять число объектов, чтобы затем вызвать его doubleValue() метод при сравнении значений. И когда вы сейчас передаете либо массив объектов Integer (который содержит только целые числа), либо массив объектов Double (которые могут быть числами с плавающей запятой или целыми числами), такая же обработка может иметь место.

Но, конечно: все это может работать только тогда, когда ваш список упорядочен (в вашем примере это не так).

Другие вопросы по тегам