2016-09-16 33 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所以常用3 [X] = 143,其中發現x爲目標二進制搜索有序排列問題

我數組索引嘗試了帶斷點的調試器,但它並沒有給我太多的信息或細節。

我從調試器有:所以檢測arr[i] == arr[5] == 91 < 143但它永遠不會改變任何東西,找到返回爲found==0問題是什麼嗎?

編輯:我得到它的工作:

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等於8lower等於7i成爲什麼?看看那個,看看你能否從那裏弄清楚。