【Java】初期化子の使い方:ユーザ名と教科の点数から、合計・平均点を算出する

■概要

実装する処理の概要は以下の通り。

  • ユーザ名と教科の点数から、合計・平均点を算出
  • 教科は国語、英語、数学、歴史、科学とする
  • コンストラクタは以下の3つ
    • 言語科目(国語、英語)
    • 言語科目以外(数学、歴史、科学)
    • 全科目(国語、英語、数学、歴史、科学)
  • 初期化しで、任意区切りの値を出力する

■クラス図

実装する処理のクラス図を以下に示す。

■サンプルコード

・SampleInitializer.java

package sample;

public class SampleInitializer {

  private String userName;
  private int scoreJapanese;
  private int scoreEnglish;
  private int scoreMath;
  private int scoreScience;
  private int scoreHistory;
  private int[] scoreList;

  // 初期化子
  {
    System.out.println("====ユーザの合計・平均点算出クラス呼び出し====");
  }

  /* 言語科目のコンストラクタ
      @param ユーザ名
      @param 国語
      @param 英語
   */
  public SampleInitializer(String userName, int scoreJapanese, int scoreEnglish) {
    this.userName = userName;
    this.scoreJapanese = scoreJapanese;
    this.scoreEnglish = scoreEnglish;
    this.scoreList = new int[]{this.scoreJapanese, this.scoreEnglish};
  }

  /* 言語科目以外のコンストラクタ
      @param ユーザ名
      @param 数学
      @param 科学
      @param 歴史
   */
  public SampleInitializer(String userName, int scoreMath, int scoreScience, int scoreHistory) {
    this.userName = userName;
    this.scoreMath = scoreMath;
    this.scoreScience = scoreScience;
    this.scoreHistory = scoreHistory;
    this.scoreList = new int[]{this.scoreMath, this.scoreScience, this.scoreHistory};

  }

  /* 全科目のコンストラクタ
      @param ユーザ名
      @param 国語
      @param 英語
      @param 数学
      @param 科学
      @param 歴史
   */
  public SampleInitializer(String userName, int scoreJapanese, int scoreEnglish, int scoreMath,
      int scoreScience, int scoreHistory) {
    this.userName = userName;
    this.scoreJapanese = scoreJapanese;
    this.scoreEnglish = scoreEnglish;
    this.scoreMath = scoreMath;
    this.scoreScience = scoreScience;
    this.scoreHistory = scoreHistory;
    this.scoreList = new int[]{this.scoreJapanese, this.scoreEnglish, this.scoreMath, this.scoreScience, this.scoreHistory};
  }

  // 合計点を算出する処理
  private int calSum(){
    // 返却用合計値
    int sum = 0;

    // 得点リスト分繰り返し
    for (int score: this.scoreList){

      // 得点を加算する
      sum += score;
    }
    return sum;
  }

  // 平均点を算出する処理
  private double calAverage(){
    if (this.scoreList.length == 0){
      return 0;
    }
    return (double) calSum() / this.scoreList.length;
  }

  // ユーザの合計・平均を出力する処理
  public void getUserSumAverageScore(){
    System.out.println("ユーザ名:" + this.userName);
    System.out.println("合計点:" + calSum());
    System.out.println("平均点:" + calAverage());

  }

}

・HowToInitializerMain.java

package main;

import sample.SampleInitializer;

public class HowToInitializerMain {

  public static void main(String[] args){

    // 言語科目
    SampleInitializer sampleInitializerUserA = new SampleInitializer("UserA", 50, 40);
    sampleInitializerUserA.getUserSumAverageScore();

    // 言語科目以外
    SampleInitializer sampleInitializerUserB = new SampleInitializer("UserB", 60, 70, 80);
    sampleInitializerUserB.getUserSumAverageScore();

    // 全科目
    SampleInitializer sampleInitializerUserC = new SampleInitializer("UserC", 30, 60, 20, 100, 70);
    sampleInitializerUserC.getUserSumAverageScore();

  }
}

■実行結果

====ユーザの合計・平均点算出クラス呼び出し====
ユーザ名:UserA
合計点:90
平均点:45.0
====ユーザの合計・平均点算出クラス呼び出し====
ユーザ名:UserB
合計点:210
平均点:70.0
====ユーザの合計・平均点算出クラス呼び出し====
ユーザ名:UserC
合計点:280
平均点:56.0

コメント