计算学生证列表的GPA

Posted

技术标签:

【中文标题】计算学生证列表的GPA【英文标题】:Computing GPA of list of Student ID 【发布时间】:2020-04-04 04:54:58 【问题描述】:

JAVA 初学者。我正在尝试打印学生的 GPA。找到下面的说明问题。

我们只能有 3 个等级:A、B、C 对应点 4、3、2。假设一个学生有 获得了 A、A、A 和 B 的成绩。GPA = (4+4+4+3) / 4 = 3.75。

calculateGPA 应该返回学生的 GPA 数组。

输入: 学生列表 = 1001, 1002 studentgrades = 'A','A','A','B','A','B','B';

输出:(预期)

3.75, 3.333

输出:(实际)

4.00, 0.00

import java.util.ArrayList;

    public class StudentUtil 

        public static double[] calculateGPA(int[] studentIdList, char[][] studentsGrades) 

            double[] Grades = new double[studentIdList.length];

            for(int i = 0; i < studentsGrades.length; i++) 
                double sumGrades = 0.0;

                for(int j = 0; j < studentsGrades.length; j++) 

                    if(studentsGrades[i][j] == 'A') 
                        sumGrades += 4;
                    
                    else if(studentsGrades[i][j] == 'B') 
                        sumGrades += 3;
                    
                    else if(studentsGrades[i][j] == 'C') 
                        sumGrades += 2;
                    
                
                Grades[i++] = sumGrades / studentsGrades.length;
            

            return Grades;
        

   //(Test Case)

    import static java.lang.System.out;
    import java.text.DecimalFormat;
    import static java.lang.System.out;

    public class TestStudentUtil 

        public static void main(String[] args) throws Exception 
            int[] studentIdList =  1001, 1002 ;
            char[][] studentsGrades =   'A', 'A', 'A', 'B' ,  'A', 'B', 'B'  ;

            double[] results = StudentUtil.calculateGPA(studentIdList, studentsGrades);

            for (double result : results) 
                out.printf("%.2f\n", result);
            


        
    

【问题讨论】:

你的两个循环从 0 循环到 studentGrades.length。出于某种我无法理解的原因,你有 i++ 两次。你也除以错误的数字。提取一种方法来计算单个数组的平均值。这会让事情变得更加清晰。 【参考方案1】:

问题出在内部循环中:您的循环条件是j &lt; studentsGrades.length,而当它应该是j &lt; studentsGrades[i].length 来遍历数组studentsGrades[i] 的所有条目时。

编写此代码的更简洁的方法是使用增强的for 循环,因为无论如何您只需要值,而不是索引。除了更易于阅读之外,这还避免了像编写错误的循环绑定这样的细微错误的可能性。

            for(int i = 0; i < studentsGrades.length; i++) 
                double sumGrades = 0.0;
                char[] currentGrades = studentsGrades[i];

                for(char grade : currentGrades) 
                    if(grade == 'A') 
                        sumGrades += 4;
                    
                    else if(grade == 'B') 
                        sumGrades += 3;
                    
                    else if(grade == 'C') 
                        sumGrades += 2;
                    
                
                Grades[i] = sumGrades / currentGrades.length;
            

最后的划分也有同样的问题;你需要除以这个学生的成绩,而不是学生的数量。

还要注意i++ 已经在你的外循环更新步骤中完成,所以你不应该在Grades[i] = ... 行中也这样做。

【讨论】:

嗨@kaya3 请解释一下这个逻辑“char[] currentGrades = studentsGrades[i];”。我不太清楚。 studentGrades 是一组数组 - 每个学生一个数组 - 所以 studentGrades[i] 只是学生 i 成绩的数组。

以上是关于计算学生证列表的GPA的主要内容,如果未能解决你的问题,请参考以下文章

SQLPLUS - 根据每门课程的成绩、总学分和每门课程的学分计算每个学生的 GPA

如何根据成绩和学分计算 GPA?

GPA怎么算

GPA怎么算

如何从 python 中的用户 2 值读取并找到最高 GPA?

gpa如何换算?