计算学生证列表的GPA

Computing GPA of list of Student ID

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

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

计算GPA应该return学生的GPA数组。

输入: 学生名单 = {1001, 1002} 学生成绩 = {{'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);
            }


        }
    }

问题出在内部循环中:您的循环条件是 j < studentsGrades.length,而它应该是 j < studentsGrades[i].length 以遍历数组 studentsGrades[i].[=17= 的所有条目]

编写此代码的一种更简洁的方法是使用增强的 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] = ....

行中也执行此操作