抽象データ型 - その2 -

メソッドをクラスあるいはインスタンスに持たせる

前々回のExamRecordクラスにいくつかメソッドを加えたクラスを考える。

package j2.lesson02_2;

public class ExamRecord2 {
    String name;
    int math;
    int japanese;
    int english;

    public ExamRecord2(String name,
            int math, int japanese, int english) {
        this.name = name;
        this.math = math;
        this.japanese = japanese;
        this.english = english;
    }

    public void showExamRecord() {
        System.out.println(this.name + ", 数学 = " + this.math
            + ", 国語 = " + this.japanese
            + ", 英語 = " + this.english
            + ", 3科目の平均 = "
            + ((this.math + this.japanese + this.english) / 3.0));
    }

    public static double averageMath(ExamRecord2[] ra){
        int sum = 0;
        for(int i=0; i<ra.length; i++){
            sum += ra[i].math;
        }
        return (double)sum / ra.length;
    }

    public static double averageJapanese(ExamRecord2[] ra){
        // 省略
    }

    public static double averageEnglish(ExamRecord2[] ra){
        // 省略
} 

Quiz


クラスメソッドとインスタンスメソッドの呼び出し方

package j2.lesson02_2;

public class ExamRecord2Action {
    public static void main(String[] args) {
        ExamRecord2[] rec = new ExamRecord2[4];

        rec[0] = new ExamRecord2("Taro", 50, 90, 100);
        rec[1] = new ExamRecord2("Hanako", 70, 30, 80);
        rec[2] = new ExamRecord2("Kenji", 60, 50, 70);
        rec[3] = new ExamRecord2("Aya", 40, 100, 90);

        for (int i = 0; i < rec.length; i++) {
            rec[i].showExamRecord();
        }

        System.out.println("全員の数学の平均点 = " + ExamRecord2.averageMath(rec));
        System.out.println("全員の国語の平均点 = " + ExamRecord2.averageJapanese(rec));
        System.out.println("全員の英語の平均点 = " + ExamRecord2.averageEnglish(rec));
    }
}
        ExamRecord2[] rec = new ExamRecord2[4];

を実行した直後の様子は下図の通り。この状態で

        rec[0].name = "Taro";
        rec[0].math = 50;

のようなことはできない。なぜか。


        rec[0] = new ExamRecord2("Taro", 50, 90, 100);

を実行した直後の様子は下図の通り。


実行結果は以下の通り。

Taro, 数学 = 50, 国語 = 90, 英語 = 100, 3科目の平均 = 80.0
Hanako, 数学 = 70, 国語 = 30, 英語 = 80, 3科目の平均 = 60.0
Kenji, 数学 = 60, 国語 = 50, 英語 = 70, 3科目の平均 = 60.0
Aya, 数学 = 40, 国語 = 100, 英語 = 90, 3科目の平均 = 76.66666666666667
全員の数学の平均点 = 55.0
全員の国語の平均点 = 67.5
全員の英語の平均点 = 85.0

Quiz