前提・実現したいこと
登録されている得点の標本分散をしたいです。
TestForOffice2で実行します。
public class TestForOffice2 {
public static void main(String[] args) {
// オブジェクトの生成 Office2 engOffice = new Office2("理工学部事務室"); //理工学部事務室に成績を登録 engOffice.registerScore("山田", 80); engOffice.registerScore("佐藤", 95); engOffice.registerScore("中村", 75); engOffice.registerScore("木下", 60); engOffice.registerScore("遠藤", 85); engOffice.registerScore("渡辺", 100); // 全ての成績を表示 engOffice.showAllScores(); System.out.println("showStudentScoreメソッドのテスト"); engOffice.showStudentScore(); System.out.println("登録されている得点の標本分散は" + engOffice.calcVariance()); /* * double result = engOffice.calcVariance(); * System.out.println("登録されている得点の標本分散は" + result); * と書いても良いが,上記のように記述することもできる. */ }
}
import java.util.*;
/**
- 事務室を表すクラス(Office2)
*/
public class Office2 {
/** * 学生名・得点を保持する(変更不要) */ private ArrayList<Score> scoreList; // ScoreクラスのArrayList /** * 事務室名を保持する(変更不要) */ private String name; /** * コンストラクタ(変更不要) * @param name 事務室の名前 */ public Office2(String name) { this.name = name; this.scoreList = new ArrayList<Score>(); } /** * 学生数を返す(変更不要) * @return 学生数 */ public int getStudentNum() { return scoreList.size(); } /** * 引数で指定された学生の得点を返す(変更不要) * @param n 学生のインデックス(n番目の学生ならn-1と指定) * @return 学生数 */ public int getStudentScore(int n) { if ( getStudentNum() < n ) return -1; else return scoreList.get(n).getScoreValue(); } /** * 得点を登録する(変更不要) * @param studentName 学生の名前 * @param scoreValue 点数 */ public void registerScore(String studentName, int scoreValue) { Score score = new Score(studentName, scoreValue); scoreList.add(score); } /** * 全ての得点を表示する(変更不要) */ public void showAllScores() { System.out.printf("%sに登録されている全得点\n", this.name ); for (Score score : scoreList) { System.out.printf("学生名:%s,", score.getStudentName()); System.out.printf("得点:%d\n", score.getScoreValue()); } } /** * 平均点を表示する(変更不要) */ public void showAverageScore() { int sum = 0; double averageScore; // このクラスで定義されているgetStudentNum()メソッドを用いて // 繰り返し回数(得点が格納されている学生の数)を設定. // 同じクラスのメソッドを呼び出す際には,単にメソッド名を指定 // すればよい.例:getStudentNum() for (int i=0; i < getStudentNum(); i++) { // このクラスで定義されているgetStudentScore()を呼び出して, // i番目の学生の得点を調べ,変数sumに足し合わせる. sum += getStudentScore(i); } averageScore = (double) sum / getStudentNum(); System.out.println( "登録されている得点の平均:" + averageScore ); } /** * 最高点を求めて表示する(変更不要) */ public void showMaxScore() { // 最初の得点を仮の最高得点としておく int maxScore = getStudentScore(0); // このクラスで定義されているgetStudentNum()メソッドを用いて // 繰り返し回数(得点が格納されている学生の数)を設定. // 同じクラスのメソッドを呼び出す際には,単にメソッド名を指定 // すればよい.例:getStudentNum() for (int i=0; i < getStudentNum(); i++) { // このクラスで定義されているgetStudentScore()を呼び出して, // i番目の学生の得点を調べ,変数maxScoreと比較する. if (maxScore < getStudentScore(i)) { maxScore = getStudentScore(i); } } System.out.println("登録されている最高得点は得点:" + maxScore); } /** * Office2クラスの中で,Office2クラスのメソッドを呼び出す方法のサンプル */ public void showStudentScore() { /* 実装するcalcVarianceメソッドでは,同じOffice2クラスの * getStudentNumメソッドとgetStudentScoreメソッドを呼び出す必要が * ある.同じクラスのメソッドを呼び出す際には,単にメソッド名を記述 * すればよい.具体的には,以下の処理を参考にすればよい. */ // getStudentNumメソッドを呼び出してみる. int num = getStudentNum(); // このように,メソッド名を書くだけで良い. // getStudentScoreメソッドを呼び出してみる. int score = getStudentScore(0); // 最初の学生の得点を取得(0から始まる) System.out.println("学生数:" + num + "最初の学生の得点;" + score); } /** * 標本分散を計算し,その結果を返すメソッド */ public double calcVariance() { // これ以降に処理を書く return 0; // この部分も変更の必要あり }
}
コードやエラーはマークダウンのcode機能を利用してご提示ください。
https://teratail.com/questions/238564
しかし、質問が書かれてないですね。やりたいこととコードがあるだけです。
現状の問題点を記載し、それに対し何を調べどう試したか具体的に記載してください。
あなたの回答
tips
プレビュー