2016-05-23 10 views
0

したがって、2つの関数を順次検索からバイナリ検索に書き直すことになります。私は2つの間の効率の違いを理解していますが、私はバイナリにそれらを変更しながら構文に問題があります。バイナリ検索メソッドを使用してアイテムのインデックスを検索する

クラス

public class SortedList<Item extends Comparable<Item>> implements SortedList<Item> { 

    private Object[] data = new Object[5]; 

    private int size = 0; 

    public int size() { 
     return size; 
    } 

    public boolean isEmpty() { 
     return size == 0; 
    } 

    public boolean equals(Object o) { 
     SortedList<Item> lst = (SortedList<Item>) o; 
     if (size != lst.size) 
      return false; 
     Iterator<Item> i1 = lst.iterator(); 
     Iterator<Item> i2 = iterator(); 
     while (i1.hasNext()) { 
      Item x1 = i1.next(); 
      Item x2 = i2.next(); 
      if (!x1.equals(x2)) 
       return false; 
     } 
     return true; 
    } 

    //METHOD TO CHANGE TO BINARY-SEARCH 
    public int indexOf(Item x) { 
     int low = 0, high = size - 1; 
     while (low <= high) { 
      int mid = (low + high)/2; 
      if ((int) x == mid) 
       return mid; 
      else if ((int) x > mid) 
       high = mid - 1; 
      else 
       low = mid + 1; 
     } 
     return -1; 
    } 

メイン

public class Main { 

    public static void main(String[] args) { 

     SortedList<Integer> s = new SortedList<Integer>(); 

     s.add(5); 
     s.add(6); 
     s.add(7); 
     s.add(8); 
     s.add(9); 
     s.add(10); 

     System.out.println(s.indexOf(6)); //-1 

    } 
} 

基本的に、私は整数でItem xを比較し、トラブルを抱えています。 xIntにキャストしても、関数はまだ-1を返しているようです。私がこの機能で比較する正しい方法は何ですか?私は必要に応じてさらにコードを提供することもできます。

+0

''((int型)のx ==半ば)の場合:どのようにこの作品は、IFだろう'Item'は' Integer'以外のものでしたか? –

答えて

3

あなたはインデックスとリスト内の要素を混乱されています

if ((int) x == mid) 

あなたが欲しい:

if(x.equals(itemAtIndex(mid))) 
+0

ああ、それは何か簡単なことを知っていた、ありがとう! – 23k

+1

私は他のステートメントについては、 'compareTo()'メソッドを使用すると仮定していますか? – 23k

+0

まさに!そういうわけで、あなたのオブジェクトが匹敵するようにする必要があります。 –

関連する問題