2017-12-28 9 views
-3

私は配列のバイナリ検索をしています。しかし、何かが外れている。ターゲットが見つからず、配列内にあるかのように-1を返します。 例:バイナリ検索が機能するなぜ私は555でキーを入れたときに、それが正しいインデックスを返しますが、私は8で、以下の例でしようとすると、それは-1を返します。..エラーを与える配列のバイナリ検索

public class bSearch { 

    public static void main(String[] args) { 
     int[] nums = {9,5,2,5,7,8,3,22,555}; 
     int key = 8; 

     System.out.println(searchForNum(nums,0,nums.length-1,key)); 
    } 

    private static int searchForNum(int[] arr,int first, int last, final int target) { 
     int middle= (first+last)/2; 

     if(last < first) { 
      return -1; 
     } 

     if(arr[middle]== target) 
      return middle; 
     else if(target < arr[middle]) { 
      return searchForNum(arr,first,middle-1,target); 
     } else { 
      return searchForNum(arr,middle+1,last,target); 
     } 
    } 

} 
+2

あなたのIDEのデバッガでコードをステップ実行しましたか? –

+0

バイナリ検索は、リスト/配列がソートされている場合にのみ有効です。そうでない場合はソートできません。 –

答えて

11

理由は、検索間隔があるということです順序付けられました。順序付けられていない間隔を渡しているため、検索エラーが発生します。検索する前に、あなたのデータアレイ上

コールArrays.sort

int[] nums = {9,5,2,5,7,8,3,22,555}; 
Arrays.sort(nums); 
+0

ああああ!完全に忘れてしまった。本当にありがとう! – rjimenez52

0

あなたはがより多くのためにこれを読んでください、あなたはそれ

に検索したいリスト/配列をソートせずにバイナリ検索をしないできinfo binary-search。あなたがするように修正あなたのmain方法に必要

public static void main(String[] args) { 
     int[] nums = {9,5,2,5,7,8,3,22,555}; 
     int key = 8; 
     Arrays.sort(nums); // sort the array 
     System.out.println(searchForNum(nums,0,nums.length-1,key)); 
    } 
関連する問題