BohYoh.comトップページへ

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

戻る  

演習2-10の解答

 0.1~:*
 0.2~:***
 0.3~:*
 … 以下省略 …
 視力の分布を右のようなグラフで出力するように書きかえたプログラムを作成せよ。
 記号文字'*'を人数分だけ繰り返し表示すること。

// 演習2-10 // 身体検査データ用クラスの配列から平均身長と視力の分布を求める(グラフ表示) class PhysicalExaminationEx {    static final int VMAX = 21;      // 視力の分布(0.0から0.1刻みで21個)    static class PhyscData {       String name;      // 氏名       int    height;      // 身長       double vision;      // 視力       //--- コンストラクタ ---//       PhyscData(String name, int height, double vision) {          this.name    = name;          this.height = height;          this.vision = vision;       }    }    //--- 身長の平均値を求める ---//    static double aveHeight(PhyscData[] dat) {       double sum = 0;       for (int i = 0; i < dat.length; i++)          sum += dat[i].height;       return sum / dat.length;    }    //--- 視力の分布を求める ---//    static void distVision(PhyscData[] dat,                           int[] dist) {       int i = 0;       dist[i0;       for (i = 0; i < dat.length; i++)          if (dat[i].vision >= 0.0 && dat[i].vision <= VMAX / 10.0)             dist[(int)(dat[i].vision * 10)]++;    }    public static void main(String[] args) {       PhyscData[] x = {          new PhyscData("赤坂忠雄"1620.3),          new PhyscData("加藤富明"1730.7),          new PhyscData("斉藤正二"1752.0),          new PhyscData("武田信也"1711.5),          new PhyscData("長浜良一"1680.4),          new PhyscData("浜田哲明"1741.2),          new PhyscData("松富明雄"1690.8),       };       int[] vdist = new int[VMAX];               // 視力の分布       System.out.println("■ 身体検査一覧表 ■");       System.out.println(" 氏名      身長 視力");       System.out.println("--------------------");       for (int i = 0; i < x.length; i++)          System.out.printf("%-8s%3d%5.1f\n",                                       x[i].name, x[i].height, x[i].vision);       System.out.printf("\n平均身長:%5.1fcm\n", aveHeight(x));       distVision(x, vdist);            // 視力の分布を求める       System.out.println("\n視力の分布");       for (int i = 0; i < VMAX; i++) {          System.out.printf("%3.1f~:", i / 10.0);          for (int j = 0; j < vdist[i]; j++)             System.out.print('*');          System.out.println();       }    } }


戻る