package j1.lesson11;
import java.io.*;
/**
* 課題1101 - 解答例.
* @author s.arakawa
* @version $Id: Distribution_java.rps,v 1.1 2006/03/06 12:56:14 java2005 Exp $
*/
public class Distribution {
/**
* コンソールからテストの得点を整数で次々と入力し、10点区切りの得点分布表を表示するプログラム。
* 以下の擬似コードで表される。
* <pre>
* プログラム全体
* print "受験者数を入力:"
* count = コンソール入力 (整数)
* if count が負の値
* print "受験者数には0以上の値を入力してください"
* プログラムの終了
* score-list = 長さ count の新しい配列 (int[])
* for i を 0 から count - 1 まで
* print "点数を入力:"
* score-list[i] = コンソール入力(整数)
* distribution = create-distribution(score-list)
* print-distribution(distribution)
* </pre>
* @param args 無視される
* @throws IOException 入力時に例外が発生した場合
*/
public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
// print "受験者数を入力:"
System.out.print("受験者数を入力:");
// count = コンソール入力 (整数)
int count = Integer.parseInt(reader.readLine());
// if count が負の値
if (count < 0) {
// print "受験者数には0以上の値を入力してください"
System.out.println("受験者数には0以上の値を入力してください");
// プログラムの終了
return;
}
// score-list = 長さ count の新しい配列 (int[])
int[] scoreList = new int[count];
// for i を 0 から count - 1 まで
for (int i = 0; i < count; i++) {
// print "点数を入力:"
System.out.print("点数を入力:");
// score-list[i] = コンソール入力(整数)
scoreList[i] = Integer.parseInt(reader.readLine());
}
// distribution = create-distribution(score-list)
int[] distribution = createDistribution(scoreList);
// print-distribution(distribution)
printDistribution(distribution);
}
/**
* 与えられた得点の表に対して、10点区切りの得点分布表を作成する。 得点は0から100が有効で、それ以外の点数が入力された場合は、その値を得点分布表に反映させない。
* 得点分布表の各要素は、以下のようにする。
* <ol start="0">
* <li> 0 ~ 9 </li>
* <li> 10 ~ 29 </li>
* <li> 20 ~ 39 </li>
* <li> 30 ~ 39 </li>
* <li> 40 ~ 49 </li>
* <li> 50 ~ 59 </li>
* <li> 60 ~ 69 </li>
* <li> 70 ~ 79 </li>
* <li> 80 ~ 89 </li>
* <li> 90 ~ 99 </li>
* <li> 100 </li>
* </ol>
* 以下の擬似コードで表される
* <pre>
* create-distribution(score-list)
* distribution = 要素数11の新しい配列
* for i = 0 から score-list の長さ - 1
* score = score-list[i]
* if score が 0 以上 100 以下
* score-class = score の下1桁を削った値
* distribution[score-class] を 1 増加
* distribution を返す
* </pre>
* @param scoreList 得点リスト
* @return 得点リストに対する得点分布表
*/
// create-distribution(score-list)
public static int[] createDistribution(int[] scoreList) {
// distribution = 要素数11の新しい配列
int[] distribution = new int[11];
// for i = 0 から score-list の長さ - 1
for (int i = 0; i < scoreList.length; i++) {
// score = score-list[i]
int score = scoreList[i];
// if score が 0 以上 100 以下
if (0 <= score && score <= 100) {
// score-class = score の下1桁を削った値
int scoreClass = score / 10;
// distribution[score-class] を 1 増加
distribution[scoreClass]++;
}
}
// distribution を返す
return distribution;
}
/**
* 引数に与えられた得点分布表を表示する。
* 得点分布表は0点から10点区切りで10要素と、100点の1要素の合わせて11要素の配列とする。
* 以下の擬似コードで表される。
* <pre>
* print-distribution(distribution)
* for i を 0 から 9 まで
* score-start = 10 * i
* score-end = score-start + 9
* print score-start "-" score-end ":" distribution[i], 改行
* print "100:" distribution[10], 改行
* </pre>
* @param distribution 得点分布表
*/
// print-distribution(distribution)
private static void printDistribution(int[] distribution) {
// assert distribution.length == 11;
// for i を 0 から 9 まで
for (int i = 0; i <= 9; i++) {
// score-start = 10 * i
int scoreStart = i * 10;
// score-end = score-start + 9
int scoreEnd = scoreStart + 9;
// print score-start "-" score-end ":" distribution[i], 改行
System.out.println(scoreStart + "-" + scoreEnd + ":" + distribution[i]);
}
// print "100:" distribution[10], 改行
System.out.println("100:" + distribution[10]);
}
}
|