Java多维数组作业求助:学生成绩程序无法正确显示对应姓名
问题分析与修复方案
你代码里的核心问题出在学生姓名数组的初始化和姓名的索引访问上,具体问题和修复如下:
问题点
- 姓名数组初始化错误:
你用"James" + "Cody" + "Thad" + "Zach"会把四个字符串直接拼接成一个长字符串,导致StudentNames数组只有1个元素,无法和4个学生的成绩对应。 - 姓名输出错误:
打印时直接写StudentNames,会输出数组的内存地址(比如[Ljava.lang.String;@xxxxxx),而不是对应索引的学生姓名,需要用StudentNames[r]来获取第r个学生的名字。 - (可选优化)变量名不符合Java编码规范:类内局部变量建议使用小驼峰命名,比如
StudentNames改为studentNames,提升代码可读性。
修复后的完整代码
public class StudentScores { public static void main(String[] args) { // 修正:用逗号分隔每个姓名,保证数组有4个元素,和成绩数组对应 String[] studentNames = { "James", "Cody", "Thad", "Zach" }; // 可选:去掉每个子数组的第一个序号元素,数组索引r可替代序号功能 double[][] scores = { {84, 95, 67, 78}, {96, 100, 87, 92}, {90, 85, 56, 77}, {83, 87, 92, 74}}; double avg; double sum; for(int r = 0; r < scores.length; r++) { // 修正:通过索引r获取对应学生的姓名 System.out.print("Student " + studentNames[r] + " grades: "); sum = 0.0; // 将sum初始化放到外层循环内,避免重复累加 for(int c = 0; c < scores[r].length; c++) { System.out.print(scores[r][c] + " "); sum += scores[r][c]; } System.out.println(); avg = sum / scores[r].length; System.out.println("Average score: " + avg + "\n"); } } }
额外说明
- 去掉了成绩数组里的序号元素,因为循环变量
r本身就可以作为学生的序号(如果需要从1开始显示,可写成r+1),这样每个子数组正好对应4个测试成绩,计算平均分无需再减1。 - 将
sum的初始化移到外层循环内,逻辑更清晰,避免出现意外的累加问题。
内容的提问来源于stack exchange,提问作者Zeb
相关产品推荐
相关产品推荐

