2016-12-21 4 views
1

現在、バイナリ検索の問題で、1つのパラメータを渡すように求められているオブジェクトがオブジェクトです。 これは可能ですか?通常、私はこのような問題に対して2つのパラメータを使用します。私が使用してバイナリ検索と通常 - >オブジェクトだけを渡すことによる手動バイナリ検索

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

'list [mid]'を 'moons.get(mid)'に置き換えることができれば、それを2回行うことができます!あなたの '??? 'を' moons.get(mid) 'に置き換えてください! (そして、Azodiousはオブジェクトを比較する必要があると言っていましたが、実際には多くのコンテキストを投稿していませんでした。誰かからたくさんのコードがあるようですので、あなたのムーンはすでにcompareToメソッドを持っています) –

答えて

0

まず、あなたがこの質問を経る必要があります。How to compare objects by multiple fields

その後、ComparableMoonにクラスを実装します。 Moonクラスを変更できない場合は、Comparatorを作成する必要があります。

あなたの質問に???の代わりに使用できるMoonクラスのcompareToメソッドをオーバーライドする必要があります。

+0

...私はすでにオブジェクトの半径を比較するために、オーバーライドされたcompareTo()を持っています。 –

関連する問題