计算平均值?

时间:2013-02-20 05:44:37

标签: java algorithm data-structures

我对这个问题有疑问:

给出测试结果列表(每个测试结果都有测试日期,学生ID和学生的分数);返回每个学生的最终分数。学生的最终得分计算为他/她的5个最高考试成绩的平均值。您可以假设每个学生至少有5个考试成绩。

现在,事情就是这样。我不想要答案。

我尝试过散列,但散列可以提供地址密钥,所以它对我不起作用。

我想到使用数组列表,迭代计算平均值并返回前五个分数,但如何使用studentID分配数字?

说我希望输出为:Mike,15。这不是问题所需要的吗? 获取学生ID和平均数。 请帮我解决一些线索,我正在学习。

2 个答案:

答案 0 :(得分:3)

只需按学生ID(作为主要排序键)和降序分数(次要排序键)对测试结果进行排序,然后按如下方式对集合进行排序(伪代码):

lastId = element[0].Id - 1
for each record in element[]:
    if record.Id != lastId:
        lastId = record.Id
        counter = 5
        sum = 0
    if counter > 0:
        sum = sum + record.score
        counter = counter - 1
        if counter == 0:
            print "Student ", record.Id, " got average of ", (sum / 5)

由于数据已排序,您知道给定学生的所有分数在一起,前五个分数最高。因此,上面的代码将允许您全力以赴。

请记住,这取决于您的“每个学生至少有五个结果”的规则。没有它,你必须改变平均计算代码,并可能在最后一个学生上做一些后期工作循环。

答案 1 :(得分:0)

使用面向对象的原则。这里有一些提示。 创建一个Test类来表示每个测试。

class Test
{
  Date date;
  Student s;          //store instance of student- has a relationship to Student
  double[] scores;     //store test scores
  double finalscore;  //final score
  Test() {
  //Initialize scores array and assign default values (0)
  }
}

创建一个Student类来代表每个学生。

class Student
{
  String name;
  int id;
}

创建测试的数组列表。

List<Test> tests = new ArrayList<Test>();

现在只需要循环测试并找到存储在finalscore中的平均值。