【问题标题】:Calculating the average?计算平均值?
【发布时间】:2013-02-20 16:42:21
【问题描述】:

我对这个问题有疑问:

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

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

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

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

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

【问题讨论】:

    标签: java algorithm data-structures


    【解决方案1】:

    只需按学生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)
    

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

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

    【讨论】:

      【解决方案2】:

      使用面向对象的原则。这里有一些提示。 创建一个 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)
        }
      }
      

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

      class Student
      {
        String name;
        int id;
      }
      

      创建一个测试数组列表。

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

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

      【讨论】:

      • 您可以通过将所有Test 属性移动到Student 类并删除不相关的数据(如Date 和finalscore)来增强设计。
      猜你喜欢
      • 1970-01-01
      • 2013-01-14
      • 2012-06-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多