-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 + ".");

      }
}

现在我担心一次又一次地使用 counter 会使用全班的大小,而不仅仅是新生/sophs/juniors/seniors,如果我使用students.size(),它会打印数组中的所有学生,不仅仅是新生。谁能给我一些关于如何编码的提示?谢谢!

4

1 回答 1

0

据我了解,问题在于您有一个变量代表班级中的学生人数(counter,可以使用更好的名称),并且您担心因为它是整个班级的总和,所以您不会能够准确地平均仅具有特定排名的学生的分数。

那么,解决方案是遍历您的学生列表并单独计算您拥有多少新生、二年级学生等,或者更改为更好的数据结构,以便更容易确定每个班级的规模。

由于这是一个家庭作业问题,我不会给你代码,但前者可以通过一个简单的for循环来完成。只需遍历所有学生并计算每个班级有多少人。你可以总结他们的分数,而你在它。

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

于 2013-03-11T05:55:14.397 回答