Я получаю сообщение об ошибке, но я не понимаю, как это исправить. #Двоичный поиск

#java #arrays

#java #массивы

Вопрос:

Хорошо, итак, я получаю эту ошибку:

 BinarySearch.java:26: error: incompatible types: double cannot be converted to Integer
        Integer [] a = {-3,10,5,24,45.3,10.5};
                                   ^
BinarySearch.java:26: error: incompatible types: double cannot be converted to Integer
        Integer [] a = {-3,10,5,24,45.3,10.5};
                                        ^
BinarySearch.java:27: error: incompatible types: possible lossy conversion from double to int
        System.out.println("45.3 found at "  binarySearch( a, 45.3 ));
                                                          ^
  

Я понимаю, что это говорит мне, но я не знаю, как это исправить. Я везде искал исправление, но все остальное кажется не по теме. Любая помощь была бы отличной. Вот код, который у меня есть на данный момент:

 public class BinarySearch
{
    public static final int NOT_FOUND = -1;
    public 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 = 6;
        Integer [] a = {-3,10,5,24,45.3,10.5};
        System.out.println("45.3 found at "  binarySearch( a, 45.3 ));
    }
}
  

Комментарии:

1. Сообщение об ошибке очень конкретное: double cannot be converted to Integer . У вас есть массив, который, как вы говорите, содержит целые числа, но вы вводите числа с плавающей запятой в ot.

2.Измените 10.5 на 10 или 11 и 45.3 на 45 или 46 . int — это не целое значение, а бит.

3. @ElliottFrisch Мне не разрешено изменять числа, они должны оставаться как есть.

4. Затем измените Integer на Double .

5. Вы должны убедиться, что вы также внесли все необходимые изменения в другом месте; например, в параметр метода.

Ответ №1:

Массив не упорядочен. Двоичный поиск работает, только если массив упорядочен.

Ответ №2:

Вы не можете хранить значения типа Double или Float (например, 10.5) внутри массива типа Integer —

Целое число [] a = {-3,10,5,24,45.3,10.5};

Оно должно быть объявлено как массив типа Double:

 Double [] a = {-3, 10, 5, 24, 45.3, 10.5};
  

amp;

public int BinarySearch ( целое число [] a, int x )

Метод BinarySearch() должен быть способен принимать массив типа Double и значение того же типа, доступное для поиска:

 public int binarySearch(Double[] a, double x)