Я только что закончил изучать простой алгоритм BinarySearch, но меня беспокоит одна вещь: меня учили, что операторы break (и continue) часто бывают избыточными в Java, и вы можете обходиться с большинством циклов while без них. Но я не могу понять, как избавиться от подола из цикла показов BinarySearch: -
public static void BinarySearch(int[] list, int key){
int lo = 0;
int hi = list.length-1;
int mid = 0;
while(lo<=hi){
mid = lo + (hi-lo) / 2;
if(key<list[mid])
hi = mid-1;
else if(key>list[mid])
lo = mid+1;
else {
System.out.println("Key is found at index = " + mid);
break;
}
if(lo>hi){
System.out.println("Key doesn't exist in the list");
}
}
Вопрос 1. Почему цикл продолжается и продолжается, если я не включил оператор break? Не должна ли переменная «lo» в конечном итоге стать больше, чем «hi»? Почему последнее условное условие может видеть это, но не условное условие while?
Вопрос 2: Как я могу набрать цикл while без использования оператора break?