前のページ
で作成したbinSearchメソッドとそれに対するObjComparableインターフェースの利用です。
その前に少し補足します。ObjComparableインターフェイスは次のように作っていました。
package any;
public interface ObjComparable
{
public int compareTo(ObjComparable o);
}
クラスとインターフェイスの違いで説明すます。
汎用化する処理を作る場合、このようなインターフェイスを作って、それを利用して
メソッドを作ります。よく使うアルゴリズムなどでは、それを利用する作り方で作るわけです。
次は前のページで作成したRec23BinSearchクラスの一部で、
上記インターフェイスを利用した部分です。
(本来は、Record2と関係ないクラスなので、これを連想させる名前でないクラス名にすべきでしょう。
また、汎用的に使うクラスなのでmainを作らないクラスにすべきでしょう。)
package rec;
import rec.Record2;
import any.ObjComparable;
public class Rec23BinSearch //←Record2を連想させない名前の方がよい
{
・・・・省略・・・・
//バイナリーサーチ2分探索(binary search )
public static int binSearch(ObjComparable[] a, ObjComparable key, int iStart, int iEnd){
int iL = iStart; //現在の探索範囲で、先頭の添え字(左)
int iR = iEnd - 1; //現在の探索範囲で、末尾の添え字(右)
while (iL <= iR){
int iC = (iL + iR) / 2; //現在の探索範囲で、中央の添え字(中心)
ObjComparable rec = a[iC];
int val = rec.compareTo(key);//インターフェイスのメソッドで比較
if (val == 0){
return iC;//見つかった
} else if (val < 0) {//keyが大きい
iL = iC + 1;
} else {/* keyが小さい */
iR = iC - 1;
}
}
return -1; //見つからない
}
}
以下で、上記のbinSearchの使う新しい例を示します。(Record2と関係ないクラスの例です)
x,y,zのメンバを持つMyPointクラスで確認します。
このクラスで、MyPointの配列を作り、その中で、xのフィールドの値が一致するものを探す例です。
このクラス図を参考に示します。このようにインターフェイスの図では、○の記号以外に破線△矢印を用いることがあります。

■■■■の部分を正しく直しましょう。
←正しく修正してからクリックください。
←わからない場合は、クリック