2016-12-21 65 views
1

目前卡在二分查找問題上,它要求我傳遞一個參數,並且是一個對象。 但是有可能這樣做?通常我會使用兩個參數來解決這個問題。 通常用二進制搜索我用 - >通過傳遞一個對象進行手動二分搜索

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

但是,它可能只是在傳遞這樣一個參數?我需要搜索一個數組列表。

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

如果你可以用'moons.get(mid)'替換'list [mid]',那麼你可以做兩次!用'moons.get(mid)'替換你的'???'! (然後作爲Azodious提到你需要比較對象,但是你並沒有真正發佈很多上下文 - 看起來你有很多來自某人的代碼,所以你的Moon可能已經有了一個「compareTo」方法) –

回答

0

首先,你應該通過這樣一個問題:How to compare objects by multiple fields

然後,實施ComparableMoon類。如果您不能更改月球班,那麼您必須創建Comparator

您需要覆蓋Moon類中的compareTo方法,該方法可用於代替您的問題中的???

+0

啊謝謝...我已經有一個重寫的compareTo()來比較對象的半徑。 –