Я начинающий java ученик, и вот небольшая программа, которая выводит индекс искомого значения int в массиве int. Вот кодМой базовый метод двоичного поиска не работает для одного определенного значения в массиве int в Java
public static void main(String[] args) {
int rank =findNumber(7, new int[]{2, 4, 7, 10, 11, 45, 50, 59, 60, 66, 69, 70, 79});
System.out.println("Your number's index is " + rank);
}
public static int findNumber(int key, int... numbers) {
int low = 0;
int high = numbers.length - 1;
int mid = (low + high)/2;
int rank = 0;
for (int i = low; i < high; i++) {
if (key < numbers[mid]) {
high = mid;
mid = (low + high)/2;
} else if (key > numbers[mid]) {
low = mid;
mid = (low + high)/2;
} else {
rank = mid;
return rank;
}
}
return rank;
}
Проблема в том, что он работает для всех чисел в массиве, за исключением 7. Я пытался найти его отладки, но придумал ничего.
Может ли кто-нибудь сказать мне, в чем проблема?
не работает для 79 – Selvin
взял меня на время, чтобы понять, но я считаю, что я исправил это! –
Честно говоря, я совершенно не знал о поведении 'i', пока не увижу ваше объяснение. Это было основной причиной необратимости индекса для номера 7. 'i' просто превышал его« высокий »предел, и цикл заканчивался преждевременно, как вы описали. Также ваше решение для конечных значений отлично работает с 'high> = low'. Это итерация, которую программа точно должна поймать любые значения. Большое спасибо за ваше замечательное объяснение и время –