2017-10-27 5 views
2

Ich nehme einen Michigan Virtual Online-Kurs über das Lernen von Java. Wir beenden gerade unsere Studie über Arrays und eine meiner Aufgaben besteht darin, eine binäre Suche zu erstellen, um den Wert 45.3 zu finden. Das einzige Problem ist, dass 45.3 nicht als Integer im cmd sondern als Doppel gelesen wird. Wie formuliere ich meinen Code, damit ich doppelte und ganzzahlige Werte in mein Array aufnehmen kann? Andere Klassenkameraden nehmen diesen Kurs auch, so dass dies ihnen helfen wird, wenn sie feststecken.Binäre Suche - Doppel und Ganzzahlen im selben Array

class binarysearcharrayunitproject 
{ 
    public static final int NOT_FOUND = -1; 
    public static int binarySearch(Integer [] a, int x) 
    { 
     int low = 0; 
     int high = a.length-1; 
     int mid; 
     while(low <= high) 
     { 
      mid = (low + high)/2; 


     if(a[mid] .compareTo(x)<0) 
       low = mid + 1; 
     else if(a[mid].compareTo(x) > 0) 
        high = mid-1; 
     else 
        return mid; 
    } 
    return NOT_FOUND; 
    } 


public static void main(String[] args) 
    { 
      int SIZE = 6; 
     Integer[]a= **{-3,10,5,24,45.3,10.5};** 
      System.out.println("45.3 found at " +binarySearch(a, 78)); 
    } 

}

Danke

Antwort

1

Wenn Sie "ganze Zahlen und Doppel", dann, was Sie wirklich haben, ist nur verdoppelt. Verwenden Sie eine Double[] anstelle einer Integer[].

In der Tat Sie scheinen nicht Wrapper zu müssen, so verwendet nur double[] mit < und > anstelle der compareTo Methode.

0

Numerische Ganzzahlliterale werden als int Werte kompiliert, und Java-Arrays haben genau einen Typ, den sie speichern. Allerdings wird java automatischint Werte double erweitern bei Bedarf, so dass Sie einen double[] für Ihre Werte verwenden:

double[] a = {-3,10,5,24,45.3,10.5}; // compiles OK 

und Ihre Methodensignatur ändern:

public static int binarySearch(double[] a, int x); 

Beachten Sie, dass Sie kann nicht verwenden Double[] (Double ist die Java-Wrapper-Klasse für eine double), weil während Java kann automatisch von int zu erweitern doubleund autobox double-Double, wird es beide nicht tun, das heißt diese Zeile kompilieren nicht:

Double[] a = {-3,10,5,24,45.3,10.5}; // compile error for the int literals!