-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
Вам нужно «ломать» на случай 'arr [middle] == val'. Если вы этого не сделаете, то «first» и «last» никогда не изменится, что означает, что ваше условие цикла никогда не может быть ложным, и вы никогда не выйдете из цикла. –
Метод 'binarySearch()' имеет тип возврата 'ArrayList', но возвращает 'int'. Считаете ли вы, что мы должны полагать, что программа не вызывает проблем? – progyammer