2017-02-19 34 views
-1

Я пытаюсь запустить двоичный поиск, где пользователь может ввести значение, а мой метод двоичного поиска вернет номер детали и цену, но он ничего не возвращает при вводе какого-либо значения , Поиск используется для параллельных массивов. Я называю метод ниже в основном.Двоичный поиск не возвращает ничего

public int binSearch(int target) 
{ 
    int first = 0; 
    int last = numCount -1; 
    boolean found = false; 


    while(first <= last && !found) 
    { 
     mid = (first + last)/2; 
     if(partNum[mid]==target) 
     { 
      found = true; 
     } 
     else if(partNum[mid]<target) 
     { 
      first = mid +1; 
     } 
     else if(partNum[mid]>target) 
     { 
      last = mid -1; 
     } 
     else if(!found) 
     { 
      mid = -1; 
     } 
     return mid; 
    } 

Вот код, который вызывает метод в основном классе.

index = inputDevice.nextInt(); 
while(inventoryArray.binSearch(index) >= 0); 
{ 
System.out.printf("Binary search found part #%d. The price is $%d\n", index, inventoryArray.binSearch(index)); 

ответ

0

Ваш массив должен быть отсортирован.

Вам необходимо установить обратную связь вне цикла , и когда будет достигнуто последнее условие (которое должно означать, что цель не находится в отсортированном массиве), вы должны разбить после установки mid = -1, и не нужно чтобы узнать, найден ли его

while(first <= last && !found) 
    { 
    mid = (first + last)/2; 
    if(partNum[mid]==target) 
    { 
     found = true; 
    } 
    else if(partNum[mid]<target) 
    { 
     first = mid +1; 
    } 
    else if(partNum[mid]>target) 
    { 
     last = mid -1; 
    } 
    else 
    { 
     mid = -1; 
     break; 
    } 
    } 
    return mid; 
+0

Файл для массива уже отсортирован. Я обновил возвращение и добавил перерыв, но он все равно ничего не вернет. Вы хотите, чтобы я включил больше информации о классе основного класса и массива? – Checkpleese

+0

Да, пожалуйста, это было бы полезно –

+0

Я просто установил его для возврата -1, и после этого программа скомпилирована. Я думаю, что это что-то о возвращении в середине. – Checkpleese