我对这个问题有疑问:
给出测试结果列表(每个测试结果都有测试日期,学生ID和学生的分数);返回每个学生的最终分数。学生的最终得分计算为他/她的5个最高考试成绩的平均值。您可以假设每个学生至少有5个考试成绩。
现在,事情就是这样。我不想要答案。
我尝试过散列,但散列可以提供地址密钥,所以它对我不起作用。
我想到使用数组列表,迭代计算平均值并返回前五个分数,但如何使用studentID分配数字?
说我希望输出为:Mike,15。这不是问题所需要的吗? 获取学生ID和平均数。 请帮我解决一些线索,我正在学习。
答案 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中的平均值。