2016-12-21 3 views
1

Derzeit stecken auf ein Problem mit der binären Suche, die mich fragt, um einen Parameter übergeben mit ist ein Objekt. Aber ist es möglich, dies zu tun ?? Normalerweise würde ich zwei Parameter für ein Problem wie dieses verwenden. Normalerweise mit binärer Suche verwenden I ->Manuelle binäre Suche durch die Übergabe nur eines Objekts

int binarySearch(int[] list, int searchItem) 
{ 
int mid=0; 
int start=0; 
int end=list.length-1; 
boolean found=false; 

//Loop until found or end of list. 
while (start <= end && !found) 
{ 
mid = (start + end)/2; 
if (list[mid] == searchItem) 
    found = true; 
else 
    if (list[mid] > searchItem) 
    end = mid - 1; 
    else 
    start = mid + 1; 
} 
if(found) 
return mid; 
else 
return(-1); 
} 

Aber ist es möglich, in einem Parameter wie dies passiert gerade ?? Ich muss eine Array-Liste durchsuchen.

public int binarySearch(Moon searchItem){ 
    int mid = 0; 
    int start = 0; 
    int end = moons.size() -1; 
    boolean found = false; 

    while(start <= end && !found){ 
     mid = (start + end)/2; 
     if(moons.get(mid).equals(searchItem)){ 
      found = true; 
     } 
     else{ 
      if(???)) { 
      } 
      else 
      etc etc  
     }  
    } 
    return 0; 
} 
+0

Wenn Sie 'list [mid]' durch 'moons.get (mid)' ersetzen können, dann können Sie es zweimal tun! Ersetzen Sie Ihr '???' durch 'moons.get (mid)' auch! (Und dann, wie Azodious erwähnte, müssen Sie Objekte vergleichen, aber Sie haben nicht wirklich viele Kontexte gepostet - es sieht so aus, als hätten Sie eine Menge Code von jemandem bekommen, vielleicht hat Ihr Mond schon eine 'compareTo' Methode) –

Antwort

0

Zuerst sollten Sie durch diese Frage gehen: How to compare objects by multiple fields

Dann Comparable-Moon Klasse implementieren. Wenn Sie die Mondklasse nicht ändern können, müssen Sie Comparator erstellen.

Sie müssen compareTo Methode in Moon-Klasse überschreiben, die anstelle von ??? in Ihrer Frage verwendet werden kann.

+0

Ah danke ... habe ich bereits eine override comparisonTo(), um den Radius der Objekte zu vergleichen. –