0

このコードでは、学生が取得した最高点と、すべての点数の平均を調べたいと思います。マークは、ユーザー入力によって ArrayList に入れられます。ダブルは半分やったけどどうやって終わらせたらいいのかわからず、トップマークの見つけ方を知りたいです。

ありがとう。

import java.util.*;
import java.lang.*;
class Course
{
    private ArrayList<Student> people = new ArrayList<Student>();

    public void add( Student s )
    {
        people.add( s );
    }
    //Return the number of students who passed (mark>= 40)
    public int pass()
    {
        int count = 0;
        for ( int i=0; i < people.size(); i++ )

        {
            int mark = people.get(i).getMark();
            if(mark < 40){
                count = count +1;
            }
        }

        return count;
    }

    public int fail()
    {
        int count = 0;
        for ( int i=0; i < people.size(); i++ )

        {
            int mark = people.get(i).getMark();
            if(mark < 40){
                count = count +1;
            }
        }

        return count;
    }

   public String top()
   {

   }

    public double average()
    {
        int sum=0;

        for (int i=0; i < people.size(); i++ )
        {
            double average = sum / (double) i;
        }

        return sum;
    }

}
4

5 に答える 5

1

whereusesを比較フィールドとして使用Collections.max(people, yourComparator)します。次のことができます。yourComparatorgetMark

Student maxStudent = Collections.max(people, new Comparator<Student>() {
    @Override
    public int compare(Student first, Student second) {
        if (first.getMark() > second.getMark())
            return 1;
        else if (first.getMark() < second.getMark())
            return -1;
        return 0;
    }
});
于 2013-03-11T19:10:56.007 に答える
0

これは、add(Student)メソッドで統計を収集することで実現できます。

public class Course {
    private ArrayList<Student> people = new ArrayList<Student>();
    private int passing = 0;
    private int failing = 0;
    private int top = Integer.MIN_VALUE;
    private int sum = 0;

    public void add( Student s ) {
        people.add( s );
        if(s.getMark() >= 40){
            passing++;
        }
        else {
            failing++;
        }
        sum += s.getMark();
        if(s.getMark() > top) {
            top = s.getMark();
        }
    }

    public int pass() {
        return passing;
    }

    public int fail() {
        return failing;
    }

    public int top() {
        return top;
    }

    public double average() {
        return sum / people.size();
    }
}

あなたの質問に直接答えるために、トップは単に各マークを最大の見つかったマークと比較して見つけられます。平均は、合計をマークの数で割ることによって求められます。

于 2013-03-11T19:12:46.680 に答える
0

トップマークを取得するには、より高いマークが見つかるたびに置き換える変数を作成します。すでにループしている場合は、ループ内のすべてのマークを合計し、それを合計人数で割ることで平均を見つけることができます。ここでは、同じループで両方を実行しました。

int totalMark = 0;
int topMark = 0;
for (int i=0; i< people.size(); i++) {
    int mark = people.get(i).getMark(); 
    if (mark > topMark) {
        topMark = mark;
    }
    totalMark += mark;
}
int averageMark = totalMark / people.size();
于 2013-03-11T19:11:12.963 に答える
0

クラスでComparableインターフェイス(http://docs.oracle.com/javase/6/docs/api/java/lang/Comparable.html)を実装してから(http://docs.oracle.com/javaseを使用することができます/1.4.2/docs/api/java/util/Collections.html ) を使用するクラスと、最大および最小グレード値を取得する関数。平均成績値を取得するには、成績値の合計を作成し、最後に合計を で割ることを繰り返す必要があります。StudentCollectionsmaxminArrayListArrayList.size()

于 2013-03-11T19:58:35.537 に答える
0

これをチェックして。それはあなたを助けるかもしれません。

上位 3 つを除くすべての数値の平均を求める Java プログラム

于 2013-07-27T03:22:43.940 に答える