BohYoh.comトップページへ

Javaによるアルゴリズムとデータ構造

戻る  

演習3-6の解答

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

// 演習3-6 // 身体検査データ配列からの探索(視力) import java.util.Arrays; import java.util.Scanner; import java.util.Comparator; class PhysExamSearchV {     //--- 身体検査データ ---//     static class PhyscData {         String name;            // 氏名         int       height;            // 身長         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) ?  1 :                        (d1.vision < d2.vision) ? -1 : 0;             }         }     }     public static void main(String[] args) {         Scanner stdIn = new Scanner(System.in);         PhyscData[] x = new PhyscData[] {    // 視力順でなければならない                             new PhyscData("赤坂忠雄", 162, 0.3),                             new PhyscData("長浜良一", 168, 0.4),                             new PhyscData("松富明雄", 169, 0.8),                             new PhyscData("加藤富明", 173, 0.7),                             new PhyscData("浜田哲明", 174, 1.2),                             new PhyscData("武田信也", 171, 1.5),                             new PhyscData("斉藤正二", 175, 2.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]);         }     } }


戻る