2016-09-10 2 views
-3

Вот мой код программы с помощью бинарного поиска:Двоичной программы в Java

import java.util.Random; 


public class QSrt { 

int[] arr = new int[20]; 

public void addElement() { 
    for (int i = 0; i < arr.length; i++) { 
     Random rd = new Random(); 
     arr[i] = rd.nextInt(10); 
    } 

} 
public void sort(){ 
    for (int i = 0; i < arr.length - 1; i++) { 
     for (int j = arr.length - 1; j > i; j--) { 
      if(arr[j] < arr[j-1]){ 
       int t = arr[j]; 
       arr[j] = arr[j-1]; 
       arr[j-1] = t; 
      } 

     } 

    } 
} 

public int binarySearch(int val){ 
    int first = 0; 
    int last = arr.length - 1; 
    int index = -1; 
    while (first <= last) { 
     int middle = (first + last)/2; 
     if(arr[middle] == val){ 
      index = middle; 
     }else if(arr[middle] < val){ 
      first = middle + 1; 
     }else{ 
      last = middle - 1; 


     } 
    } 
    return index; 
} 

public static void main(String[] args) { 
    QSrt arr = new QSrt(); 
    arr.addElement(); 
    arr.sort(); 

    for(int i = 0; i < arr.arr.length;i++){ 
     System.out.print(arr.arr[i] + " "); 
    } 
    System.out.println(""); 
    System.out.println(arr.binarySearch(0)); 
} 

}

Но я получаю проблему: программа выводит только элементы отсортированного массива, то он продолжает работать и делает не печатает индекс еще

Вот картинка: enter image description here

+0

Вам нужно «ломать» на случай 'arr [middle] == val'. Если вы этого не сделаете, то «first» и «last» никогда не изменится, что означает, что ваше условие цикла никогда не может быть ложным, и вы никогда не выйдете из цикла. –

+0

Метод 'binarySearch()' имеет тип возврата 'ArrayList', но возвращает 'int'. Считаете ли вы, что мы должны полагать, что программа не вызывает проблем? – progyammer

ответ

0

Вы должны выйти из цикла один раз в Дези красное значение

if(arr[middle] == val){ 
     index = middle; 
     return index; //OR just => return middle; 
    } 
Смежные вопросы