2016-11-11 6 views
-4

私は10進数を配列に入れてバイナリ検索を使って検索しようとしています。これは私のコードです。私はこれを使って番号45.3を取得する必要があり、私は間違って何をしているのか分からないので、助けてください。バイナリ検索問題の宿題

class Project3 
{ 
    public static void main(String[] args) 
    { 
     double[] data= new double[6]; 
     data[0]=-3; 
     data[1]=10; 
     data[2]=5; 
     data[3]=24; 
     data[4]=45.3; 
     data[5]=10.5; 
     binarySearch(data[4]); 
    } 
    public boolean binarySearch(int key) 
    { 
     int size=6; 
     int low=0; 
     int high=size-1; 
     while(high>=low) 
     { 
      int middle = (low + high)/2; 
      if(data[middle] == key) 
      { 
       return true; 
      } 
      if(data[middle] < key) 
      { 
       low=middle+1; 
      } 
      if(data[middle]>key) 
      { 
       high=middle-1; 
      } 
     } 
     return false; 
    } 
} 
+4

バイナリ検索は、あなたがあなたの方法にint型を渡す – rafid059

+1

ソートされた配列でのみ動作します。どうして? – ryekayo

+1

Javaの小数点以下は?それは参考になりますか?これはあなたにとって便利です:http://stackoverflow.com/help/how-to-ask –

答えて

-2

変更キーをダブルにします。配列全体をクラスにアクセスできるように配列をメンバ変数にします。

static double[] data = new double[6]; 

public static void main(String[] args) { 
    data[0] = -3; 
    data[1] = 10; 
    data[2] = 5; 
    data[3] = 24; 
    data[4] = 45.3; 
    data[5] = 10.5; 
    System.out.println(binarySearch(data[4])); 
} 

public static boolean binarySearch(double key) { 
    int size = 6; 
    int low = 0; 
    int high = size - 1; 
    while (high >= low) { 
     int middle = (low + high)/2; 
     if (data[middle] == key) { 
      return true; 
     } 
     if (data[middle] < key) { 
      low = middle + 1; 
     } 
     if (data[middle] > key) { 
      high = middle - 1; 
     } 
    } 
    return false; 
} 

このコードは私のために働いて、あなたはバイナリ検索が何であるかを読まなければならない正しい答えに

+0

最初にソートする必要があります。彼にFを取得しますか?ダブルスの '=='はAでもない。 – IceGlow

+0

これは、5 <45.3と24 <45.3のためにのみ機能します。アルゴリズムを使用する前に配列をソートする必要があります。 – Vadim

0

ファーストを取得しています。これはソートされた配列に対してのみ機能します。ソートされた順序でデータを挿入するか、データをソートするメソッドを作成します。

`

class Project3 
{ 
    public static void main(String[] args) 
    { 
     double[] data= new double[6]; 
     data[0]=-3; 
     data[1]=10; 
     data[2]=5; 
     data[3]=24; 
     data[4]=45.3; 
     data[5]=10.5; 
     binarySearch(data[4]);//are you doing any thing with the result. 
    } 
    public boolean binarySearch(int key)// you can not pass a double value to int. 
    { 
     int size=6;//It's better to use data.length instead of hard coding it. 
     int low=0; 
     int high=size-1; 
     while(high>=low) 
     { 
      int middle = (low + high)/2; 
      if(data[middle] == key)//from where are you passing the data array. 
      { 
       return true; 
      } 
      if(data[middle] < key) 
      { 
       low=middle+1; 
      } 
      if(data[middle]>key) 
      { 
       high=middle-1; 
      } 
     } 
     return false; 
    } 
} 

`

以下のコードは動作します。 `

public class Project3 { 
    static double[] data; 
    public static void main(String[] args) { 
     data = new double[6]; 
     data[0] = -3; 
     data[1] = 5; 
     data[2] = 10; 
     data[3] = 10.5; 
     data[4] = 24; 
     data[5] = 44.5; 
     System.out.println(binarySearch(data[4])); 
     System.out.println(binarySearch(90)); 
    } 
    public static boolean binarySearch(double key) { 
     int size = data.length; 
     int low = 0; 
     int high = size - 1; 
     while (high >= low) { 
      int middle = (low + high)/2; 
      if (data[middle] == key) 
       return true; 
      if (data[middle] < key) 
       low = middle + 1; 
      if (data[middle] > key) 
       high = middle - 1; 
     } 
     return false; 
    } 
} 

`