2013-03-11 35 views
-1

所以我试图做一个简单的程序,它有一个模拟大学课程的数组。您可以将学生添加到课程中(称为IOOP),获取姓名,地位,测验分数,测验平均数,期末考试平均数等。该数组将学生作为其项目,其中一种方法称为printFinalExamDetails。我的教授希望我们不仅能够显示整个班级的平均期末考试成绩(我已经编码),还要显示新生,大二,大三学生和老年人的平均期末考试分数。我的代码看起来像现在这种权利:如何返回字符串数组列表中某些项目的数量?

public void printFinalExamDetails () { 
    double sum, counter; sum = 0; 
    for (Student x : students) 
    { 
     sum = sum + x.getFinalExamScore(); 
     counter = students.size(); 
     System.out.println (x.getFirstName() + " " + x.getLastName() + ": " + x.getFinalExamScore()); 
     System.out.println ("The average final exam score is: " + sum/counter + "."); 


     String standing = x.computeStanding(); 
     if(standing.equals("freshman")) 
     System.out.println ("The average final exam score for the freshmen is: " + sum/counter + "."); 


     if(standing.equals("sophomore")) 
     System.out.println("The average final exam score for the sophomore is: " + sum/counter + "."); 

     } 
} 

现在恐怕连连使用计数器将使用类的全尺寸,而不仅仅是大一/ sophs /大三/大四了,如果我用学生.size(),它将打印数组中的所有学生,而不仅仅是新生。任何人都可以给我一些关于如何编码的提示吗?谢谢!

+2

请正确格式化您的代码。 – jrd1 2013-03-11 05:37:39

+0

'counter'的用途是什么?这仅仅是一个班级人数的数字吗?为什么不把它叫做classSize? – Thunderforge 2013-03-11 05:45:03

+1

你需要明白,班级的平均分数是所有学生的总分数/总数。的学生'。二年级的平均成绩是所有二年级学生的总分/总数。二年级学生。新鲜者的平均得分是所有新鲜者的总得分/总数。新鲜'。尝试基于此更新您的代码。 – Kshitij 2013-03-11 05:56:05

回答

0

从我所了解的问题是,你有一个变量代表班级中的学生人数(counter,它可以使用更好的名字),你担心因为它是全班学生的总和,你将无法准确地为只有某些排名的学生平均分数。

那么,解决方案是迭代通过你的学生列表,并有多少新生,二年级等,你有或更改为更好的数据结构,可以更容易地确定每个类。

由于这是一个作业问题,我不会给你代码,但前者可以用简单的for循环完成。只需循环所有学生,并计算出每个班级中有多少人。你可以总结自己的分数。

也许使用它的最有效的方法是将学生的数据结构更改为HashMap。您可以将您的密钥设置为学生所在班级的字符串,然后将其作为该班级中每个学生的ArrayList。这样,您可以更轻松地获得所需班级的学生,并能够通过map.values().getSize()确定每个班级的学生人数。

+0

我似乎已经明白了。我的代码可以在这里看到:http://pastebin.com/YNSLQH4u 我测试了它,它的工作原理!感谢您的帮助:) – 2013-03-13 01:35:05

+0

很高兴你明白了!请点击此答案下方的复选框,将其选为接受的答案。 – Thunderforge 2013-03-13 03:19:53

相关问题