2016-09-16 2 views
-5
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); 
} 

}

+0

Не могли бы вы рассказать о том, что именно вы пытаетесь сделать, и что именно с ним происходит? – jcolemang

+0

@jcolemang, я пытаюсь найти индекс в массиве, для которого значение равно 143. Итак, arr [x] = 143, где поиск x является целью. Он просто возвращает 0 все время. – BUFFGUY

+0

В будущем попробуйте включить эту информацию в свой вопрос, это, вероятно, причина для голосов. – jcolemang

ответ

2

Есть два вопроса. Во-первых, ваш синтаксис в while неверен, поэтому ваша программа не отправляется в бесконечный цикл. Вы хотите foundYes == false, а не foundYes = false. Вторая проблема (которую вы, возможно, еще не встретили) - это то, как вы устанавливаете i. Предположим, что upper были равны 8 и lower были равны 7. Что делает i? Посмотрите на это и посмотрите, сможете ли вы понять это.

Смежные вопросы