BohYoh.comトップページへ

新・明解Javaで学ぶアルゴリズムとデータ構造

戻る  

演習3-7の解答

 視力の降順に並んでいる身体検査データから、ある特定の視力の人を探索するプログラムを作成せよ。

// 演習3-7 // 身体検査データ配列からの探索(視力) import java.util.Arrays; import java.util.Scanner; import java.util.Comparator; class PhysExamSearchV {    //--- 身体検査データ ---//    static class PhyscData {       private String name;         // 氏名       private int    height;      // 身長       private double vision;      // 視力       //--- コンストラクタ ---//       public PhyscData(String name, int height, double vision) {          this.name = name;  this.height = height;  this.vision = vision;       }       //--- 文字列化 --//       public String toString() {          return name + " " + height + " " + vision;       }       //--- 視力降順用コンパレータ ---//       public static final Comparator<PhyscData> VISION_ORDER =                                               new VisionOrderComparator();       private static class VisionOrderComparator                                        implements Comparator<PhyscData> {          public int compare(PhyscData d1, PhyscData d2) {             return (d1.vision > d2.vision?  :                    (d1.vision < d2.vision? -0;          }       }    }    public static void main(String[] args) {       Scanner stdIn = new Scanner(System.in);       PhyscData[] x = {               // 配列の要素は視力順でなければならない          new PhyscData("赤坂忠雄"1620.3),          new PhyscData("長浜良一"1680.4),          new PhyscData("加藤富明"1730.7),          new PhyscData("松富明雄"1690.8),          new PhyscData("浜田哲明"1741.2),          new PhyscData("武田信也"1711.5),          new PhyscData("斉藤正二"1752.0),       };       System.out.print("探す視力は:");       double vision = stdIn.nextDouble();         // キー値の読込み       int idx = Arrays.binarySearch(                   x,                              // 配列xから                   new PhyscData(""0, vision),   // 身長がvisionの要素を                   PhyscData.VISION_ORDER         // VISION_ORDERを用いて探索                 );       if (idx < 0)          System.out.println("その値の要素は存在しません。");       else {          System.out.println("その値は" "x[" + idx + "]にあります。");          System.out.println("データ:" + x[idx]);       }    } }


戻る