2017-02-13 37 views
-1

Я сейчас в классе для программирования на Java и совершенно новичок в Java. Я пытаюсь создать программу, которая будет использовать бинарный поиск для значения 45,3Бинарный поиск с примитивными типами

class findValue { 
public static void main(String args[]) { 
    double a[] = new double[6]; //declaration 

    a[0] = -3; //initialization 
    a[1] = 10; 
    a[2] = 5; 
    a[3] = 24; 
    a[4] = 45.3; 
    a[5] = 10.5; 

    int n = a.length; //storing length of array 
    int temp = 0; //declaring temporary storage place 

    for (int i = 0; i < n; i++) { 
     for (int j = 1; j < (n - i); j++) { 

      if (a[j - 1] > a[j]) { 
       temp = (int)a[j - 1]; 
       a[j - 1] = a[j]; 
       a[j] = temp; //bubble sorting 
      }; 
     }; 
    }; 
    System.out.println("45.3 found" + binarySearch(a, 45.3)); 
}; 
public static void binarySearch(Integer[] a, int x) { 
    int low = 0; 
    int high = a.length - 1; 
    int mid; //values for binary search 

    while (low <= high) { 
     mid = (low + high)/2; //setting value for searching 

     if (a[mid].compareTo(x) < 0) { 
      low = mid + 1; 
     } 
     else if (a[mid].compareTo(x) > 0) { 
      high = mid - 1; 
     }; 
    }; 
}; 

Это ошибка компилятора я получил:

Line: 25 
method binarySearch in class findValue cannot be applied to given types; 
required: java.lang.Integer[],int 
found: double[],double 
reason: actual argument double[] cannot be converted to java.lang.Integer[] by method invocation conversion 
+3

Что ты не понимаешь о сообщении об ошибке? –

+0

Примитивные типы для меня немного нечеткие. Дело в том, что его получение меня больше всего - ошибка конверсии. –

+0

вы передаете двойной массив, и метод ожидает массив Integer. – RamPrakash

ответ

0

(я знаю, что есть много возможностей для улучшения, но я просто предлагаю минимальное количество изменений в программу для работы)

метод

public static void binarySearch(Integer[] a, int x) {...} 

Ожидает целых чисел, но мы хотим, чтобы он использовал удвоенные установки. Это означает, что аргументы должны быть массив удваивается, а двойная найти:

public static void binarySearch(double[] a, double x) {...} 

При этом, мы знаем, что эта функция возвращает Int, поэтому мы устанавливаем тип возвращаемого значения:

public static double binarySearch(double[] a, double x) {...} 

Теперь, наконец, мы должны вернуть номер, который мы искали, добавив следующую строку в конце метода (после того, как некоторое время):

return mid; 

Конечный результат должен быть:

class findValue { 
    public static void main(String args[]) { 
     double a[] = new double[6]; //declaration 

     a[0] = -3; //initialization 
     a[1] = 10; 
     a[2] = 5; 
     a[3] = 24; 
     a[4] = 45.3; 
     a[5] = 10.5; 

     int n = a.length; //storing length of array 
     int temp = 0; //declaring temporary storage place 

     for (int i = 0; i < n; i++) { 
      for (int j = 1; j < (n - i); j++) { 

       if (a[j - 1] > a[j]) { 
        temp = (int)a[j - 1]; 
        a[j - 1] = a[j]; 
        a[j] = temp; //bubble sorting 
       } 
      } 
     } 
     System.out.println("45.3 found: " + binarySearch(a, 45.3)); 
    } 
    public static int binarySearch(double[] a, double x) { 
     int low = 0; 
     int high = a.length - 1; 
     int mid = (low + high)/2; //values for binary search 

     while (low <= high) { 
      mid = (low + high)/2; //setting value for searching 

      if (Double.compare(a[mid], (double)x) < 0) { 
       low = mid + 1; 
      } 
      else if (Double.compare(a[mid], (double)x) > 0) { 
       high = mid - 1; 
      } 
     } 
     return mid; 
    } 
} 

Выход:

45.3 found: 5 
0

С вашей декларации методы public static void binarySearch(Integer[] a, int x) { binarySearch ожидает массив Integer и int как параметры, Пока ваш вызов в line 25 вызывает binary search с двойным массивом и двойным параметром, поэтому исключение.

Вы не можете преобразовать double в int, потому что double имеет больше «информации», чем int. двойной 43,5 преобразуется в целом потеряет .5

+0

Как я могу изменить ожидания? –

+0

вы либо изменяете тип аргумента в объявлении метода, либо изменяете аргумент, переданный при его использовании. Вы можете сделать это как public static void binarySearch (Double [] a, double x) { – Zeromus

Смежные вопросы