2013-02-20 330 views
-1

我对此问题有疑问:计算平均值?

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

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

我试过散列,但哈希可以提供地址的密钥,所以它不适用于我。

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

说我想要的输出是:迈克,15.这不是问题需要什么? 获取学生ID和平均数。 请帮我解决一些线索,我正在学习。

回答

3

仅仅通过学生证的测试结果(为主要排序关键字)和降分(小类键)然后再通过收集如下(伪代码)进行排序:

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) 

由于数据你知道一个给定学生的所有分数都在一起,并且前五个分数是最高的。因此,上面的代码将允许你全部工作。

请记住,这依赖于你的“每个学生至少有五个结果”的规则。没有这一点,你必须改变平均计算代码,并可能对最后一名学生做一些工作后循环。

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的问题。

+0

您可以通过将所有'Test'属性移动到'Student'类并删除像'Date'和'finalscore'这样的不相关数据来增强设计。 – 2013-02-20 06:09:25