计算学生证列表的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 < studentsGrades.length
,而当它应该是j < 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