-1

我对这个问题有疑问:

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

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

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

我想过使用数组列表迭代思想来计算平均值并返回前五名的分数,但是我如何用 studentID 分配数字?

假设我希望输出为:Mike, 15。这不是问题所要求的吗?获取学生证和平均人数。请帮我提供一些线索,我正在学习。

4

2 回答 2

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)

因为数据是排序的,所以您知道给定学生的所有分数都在一起,并且前五个是最高的。因此,上面的代码将允许您全部解决。

请记住,这取决于您的“每个学生至少有五个结果”规则。否则,您将不得不更改平均计算代码,并可能对最后一个学生进行一些后期工作循环。

于 2013-02-20T05:53:26.367 回答
0

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

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)
  }
}

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

class Student
{
  String name;
  int id;
}

创建测试的数组列表。

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

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

于 2013-02-20T06:01:36.953 回答