-1

そこで、大学のクラスをモデル化した配列を持つ単純なプログラムを作成しようとしています。クラスに生徒を追加し(IOOPと呼ばれます)、名前、名前、順位、クイズスコア、クイズ平均、最終試験平均などを取得できます。配列は生徒をアイテムとして受け取り、メソッドの1つはprintFinalExamDetailsと呼ばれます。私の教授は、クラス全体の平均最終試験スコア(私がすでにコーディングしたもの)を表示するだけでなく、新入生、2年生、ジュニア、およびシニアの平均最終試験スコアも表示することを望んでいます。私のコードは今このようになっています:

public void printFinalExamDetails ( ) { 
    double sum, counter; sum = 0;
    for (Student x : students ) 
    {
        sum = sum + x.getFinalExamScore();
        counter = students.size();
        System.out.println (x.getFirstName()  +  " " + x.getLastName( ) + ": " + x.getFinalExamScore( ) );
        System.out.println ("The average final exam score is: " + sum/counter + ".");


        String standing = x.computeStanding();
        if(standing.equals("freshman"))
        System.out.println ("The average final exam score for the freshmen is: " + sum/counter + ".");


        if(standing.equals("sophomore"))
        System.out.println("The average final exam score for the sophomore is: " + sum/counter + ".");

      }
}

今、私はカウンターを何度も使用することを恐れています。新入生/ソフス/ジュニア/シニアだけでなく、クラスのフルサイズを使用します。students.size()を使用すると、配列内のすべての学生が出力されます。新入生だけではありません。誰かがこれをコーディングする方法についていくつかのヒントを教えてもらえますか?ありがとう!

4

1 に答える 1

0

私が理解していることから、問題は、クラス内の学生の数を表す 1 つの変数 ( counter、より適切な名前を使用できます) があり、それがクラス全体の合計であるため、特定の順位の学生のみのスコアを正確に平均化することができます。

解決策は、学生のリストを反復処理して、新入生や 2 年生などの人数を個別にカウントするか、各クラスのサイズを簡単に判断できるように、より適切なデータ構造に変更することです。

これは宿題なので、コードは示しませんが、前者は単純なforループで実行できます。すべての生徒をループして、各クラスに何人いるかを数えるだけです。あなたがそれをしている間、あなたは彼らのスコアを合計することができます.

おそらく最も効率的な使用方法は、Students のデータ構造を HashMap に変更することです。キーを学生のクラスの地位の文字列に設定し、値をそのクラスの各学生のArrayListに設定できます。このようにして、必要なクラスの生徒だけをより簡単に取得し、 を介してクラスごとの生徒数を決定することができますmap.values().getSize()

于 2013-03-11T05:55:14.397 に答える