2016-09-16 10 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); 

私はそうは[X] = Xを見つけることが目標バイナリ検索規則配列問題

Iである143、ARR値は143であるため、配列にインデックスを見つけようとしていますブレークポイントでデバッガを試しましたが、多くの情報や詳細を教えてくれませんでした。

は、私は、デバッガから得たもの:は、だから、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の配列のインデックスを検索しようとしています。したがって、xを見つけることが目標であるarr [x] = 143です。常に0を返すだけです。 – BUFFGUY

+0

将来、あなたの質問にその情報を含めるようにしてください。これはおそらく下位票の理由です。 – jcolemang

答えて

2

は二つの問題があります。まず、whileの構文が間違っているため、プログラムが無限ループに送られていません。あなたはfoundYes == falseでなく、foundYes = falseであることが必要です。 2番目の問題(あなたがまだ出くわしていないかもしれない)は、あなたが設定している方法ですiupper8に等しく、lower7に等しいと仮定する。 iとは何ですか?それを見て、あなたがそこからそれを理解できるかどうかを見てください。

関連する問題