課題 (08:ベーシック)

作業について

今回の課題は以下のパッケージに作成してください。

パッケージの名前
j1.lesson08

作成するクラスの名前は問題ごとに指示があります。下記を参照してください

課題の提出方法については下記を参照してください。

また、別のコンピューター上に移動する際には、下記を参考にプログラムを持ち帰ってください。

問題

作成するクラスの名前
Grading

今回は、複数の受験者の成績一覧を分析するプログラムを作成します。成績は受験者ごとにクラスとして表すものとし、複数の受験者は配列で表すものとします。

a. クラスの宣言

まず、下記のようなScoreSheetというクラスを宣言してください。

性質 説明
名前 受験者の名前
英語の得点 受験者の英語の得点
数学の得点 受験者の数学の得点
物理学の得点 受験者の物理学の得点

これを使って、今回は3人分の成績情報を表すことにします。下記の3人分の成績をgetScoreSheetsメソッド内で生成し、返してください。

名前 英語の得点 数学の得点 物理学の得点
Alice 100.0 65.0 57.0
Bob 45.0 98.0 100.0
Charley 50.0 50.0 50.0

そして、Alice, Bob, Charleyそれぞれの平均点を表示するプログラムを作成してください。ただし、4人目を追加した場合や、それぞれの得点が変更される場合でも、getScoreSheetsメソッドを書き換えるだけで正しく動作するようにしてください。(受験者が一人もいない場合については考えなくて構いません。)

ヒント

インスタンスの配列を返すメソッドは、戻り値型にインスタンスの配列型を指定します。

今回の問題では、次のようなメソッドの宣言が必要になるはずです。

ScoreSheet[] getScoreSheets() {
    … (3人分の成績データを生成したものを配列に登録し、これを返す)
}

b. 平均値の計算

先ほどのプログラムを変更し、さらに受験者全体の英語の平均点を表示するようにしてください。

ヒント

「英語の平均点を計算する」というメソッドは、次のように書けます。

double getEnglishAverage(ScoreSheet[] all) {
    double total = 0.0;
    … (それぞれの英語の点数を変数totalに加算していく) …
    return total / all.length;
}

ヒント

さらに、「最初の人をとりだして、その英語の点数を利用する」というプログラムは次のように書けます。

ScoreSheet score = all[0];
double english = score.<英語の得点>;

c. 条件付き数え上げ

先ほどのプログラムを変更し、さらに数学で60点未満をとった人数を表示するようにしてください。

ヒント

「数学で60点未満をとった人数を数え上げる」というメソッドは、次のように書けます。

int countMathDropouts(ScoreSheet[] all) {
    int count = 0;
    … (数学の得点が60点未満の人を見つけたらcountに1を加算) …
    return count;
}

d. 最大の検索

先ほどのプログラムを変更し、さらに物理学で最高得点を取った人の名前を表示するようにしてください。同点がいる場合についてはどちらか一人だけ表示するようにしてかまいません。

ヒント

次のように、「ここまでの最高得点者」と「ここまでの最高得点」を意識するとよいと思います。これをfor文で表すとどうなるでしょうか。

番号 得点 ここまでの最高得点者 ここまでの最高得点
a 50 a 50
b 30 a 50
c 55 c 55
d 80 d 80
e 75 d 80
f 75 d 80