int arr[] = {21, 44, 56, 76, 89, 91, 102, 120, 143, 167, 242, 291}; //array.length == 11.
int goal = 143;
int i = (arr.length - 1)/2;
int upper = arr.length -1;
int lower = 0;
int found = 0;
boolean foundYes = false;
int j;
while (foundYes = false) {
if(arr[i] > goal) {
upper = i;
i = (upper - lower)/2;
} else if(arr[i] < goal) {
lower = i;
i = (upper - lower)/2;
} else if(arr[i] == goal) {
found = i;
foundYes = true;
break;
}
}
System.out.println(found);
Я пытаюсь найти индекс в массиве, для которого значение является 143. Таким образом, обр [х] = 143, где нахождение х цельДвоичный поиск вопрос упорядоченный массив
I попробовал отладчик с точками разрыва, но он не дает мне много информации или деталей.
То, что я получил от отладчика: Так он обнаружил, что arr[i] == arr[5] == 91 < 143
, но он никогда не меняет ничего и найденное возвращается в found==0
Что такое проблема здесь?
EDIT: Я получил это работает:
int arr[] = {21, 44, 56, 76, 89, 91, 102, 120, 143, 167, 242, 291}; //array.length == 11.
int goal = 143;
int i = (arr.length - 1)/2; //first arr[i] = 91.
int upper = arr.length -1;
int lower = 0;
int found = 0;
boolean foundYes = false;
int j;
while (foundYes == false) {
if(arr[i] > goal){
upper = i;
i = upper + (upper - lower)/2;
}
else if(arr[i] < goal){
lower = i;
i = lower + (upper - lower)/2;
}
else if(arr[i] == goal){
found = i;
foundYes = true;
break;
}
}
System.out.println(found);
}
}
Не могли бы вы рассказать о том, что именно вы пытаетесь сделать, и что именно с ним происходит? – jcolemang
@jcolemang, я пытаюсь найти индекс в массиве, для которого значение равно 143. Итак, arr [x] = 143, где поиск x является целью. Он просто возвращает 0 все время. – BUFFGUY
В будущем попробуйте включить эту информацию в свой вопрос, это, вероятно, причина для голосов. – jcolemang