Java成绩册程序:如何关联二维数组与对应学生姓名输出平均分
修复学生成绩册中个人平均分的姓名显示问题
问题根源
你当前的getStudentAverage方法里,错误地用Arrays.toString(name)打印整个姓名数组,还额外添加了不必要的"Student X"标识,导致无法正确关联单个学生的姓名。同时代码里还有几处冗余和无用代码需要清理。
具体修复步骤
- 正确关联学生姓名:在循环中通过
name[row]直接获取对应索引的学生姓名,替换掉原来的"Student " + (row+1) + Arrays.toString(name)。 - 移除无用代码:
getStudentAverage方法里的Scanner in完全没用到,直接删除。 - 优化成绩赋值逻辑:原
loadGradeArray方法的嵌套循环会重复给成绩赋值多次,完全没必要,简化成直接赋值即可。 - 格式化输出对齐:使用
printf格式化输出,让姓名和平均分的显示更整齐,匹配你期望的格式。
修复后的完整代码
import java.util.*; import java.io.*; public class GradeBook { public static void main(String[] args) { System.out.println("Starting program\n\n"); String[] STUDENT_NAMES = new String[] {"Adams", "Baker", "Campbell", "Dewey", "East"}; int[][] STUDENT_GRADES = new int[5][3]; loadGradeArray(STUDENT_GRADES); for (int i = 0; i < STUDENT_NAMES.length; i++) { System.out.printf("%-10s %5d %8d \n", STUDENT_NAMES[i], STUDENT_GRADES[i][0], STUDENT_GRADES[i][1]); } getStudentAverage(STUDENT_GRADES, STUDENT_NAMES); } //end main public static void getStudentAverage(int[][] grade, String[] name) { double sum = 0; double average = 0; for(int row = 0; row<grade.length; row++) { // 只计算前两门考试成绩 for(int col = 0; col < 2; col++) { sum += grade[row][col]; } average = sum / 2; sum = 0; // 按期望格式输出,对齐姓名 System.out.printf("The average of %-10s is: %.1f\n", name[row], average); } } public static void loadGradeArray(int[][] STUDENT_GRADES) { // 直接给每个学生的两门成绩赋值,去掉冗余循环 STUDENT_GRADES[0][0] = 75; STUDENT_GRADES[0][1] = 75; STUDENT_GRADES[1][0] = 100; STUDENT_GRADES[1][1] = 75; STUDENT_GRADES[2][0] = 84; STUDENT_GRADES[2][1] = 75; STUDENT_GRADES[3][0] = 80; STUDENT_GRADES[3][1] = 75; STUDENT_GRADES[4][0] = 50; STUDENT_GRADES[4][1] = 75; } } //end class
输出效果
运行后会得到你期望的格式:
Starting program Adams 75 75 Baker 100 75 Campbell 84 75 Dewey 80 75 East 50 75 The average of Adams is: 75.0 The average of Baker is: 87.5 The average of Campbell is: 79.5 The average of Dewey is: 77.5 The average of East is: 62.5
内容的提问来源于stack exchange,提问作者b-rad90
相关产品推荐
相关产品推荐

