2016-11-11 2 views
-4

Ich versuche, eine Dezimalzahl in ein Array zu setzen und suchen Sie mit einer binären Suche und es funktioniert nicht, wie ich es will. Das ist mein Code. Ich muss die Nummer 45.3 verwenden und ich weiß nicht, was ich falsch mache, bitte helfen Sie mir.Hausaufgaben auf binäre Suche Problem

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

binäre Suche funktioniert nur auf sortierten Arrays – rafid059

+1

Sie einen int in der Methode übergeben. Warum? – ryekayo

+1

Dezimalzahlen in Java? Es ist eine Referenz? Das ist nützlich für Sie: http://stackoverflow.com/help/how-to-ask –

Antwort

-2

ändern Sie den Schlüssel zu verdoppeln. Dann mache das Array zu einer Membervariable, auf die du in der ganzen Klasse zugreifen kannst.

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; 
} 

dieser Code für mich arbeiten und bekommt die richtige Antwort

+0

Sollte zuerst sortieren, wollen Sie, dass er ein F bekommt? '==' auf Doppel ist auch kein A. – IceGlow

+0

Es funktioniert nur, weil 5 <45.3 und 24 <45.3. Array muss vorher sortiert werden, um diesen Algorithmus zu verwenden. – Vadim

0

Zuerst sollten Sie lesen, was binäre Suche ist. Es funktioniert nur bei sortierten Arrays. Fügen Sie die Daten entweder in einer sortierten Reihenfolge ein, oder erstellen Sie eine Methode zum Sortieren der Daten.

`

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; 
    } 
} 

`

der folgende Code arbeiten. `

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; 
    } 
} 

`