如何找出数组中的最大值?学生成绩数组关联姓名的代码求助
问题排查与代码修正
咱们一步步拆解你代码里的问题,然后把它修正过来:
你的代码存在的核心问题
- 局部变量未初始化:你声明了
String highStudent;但没有给初始值,Java要求局部变量必须初始化后才能使用,这会直接导致编译错误。 - 索引对应错误+越界风险:循环里使用
n[i+1]是完全错误的——成绩数组g的第i个元素对应的是姓名数组n的第i个元素,而且当i遍历到数组最后一个索引时,i+1会超出数组范围,触发ArrayIndexOutOfBoundsException。 - 提前返回,未找到真正的最高分:你的循环只要找到比当前
highest大的元素就立刻return,这会导致程序只检查到第一个比初始值大的分数就停止,后续更高的分数根本不会被遍历到。 - 不合理的默认返回值:你最后返回
null,但只要输入的数组是有效非空的,必然存在最高分对应的学生姓名,返回null反而会给调用方带来空指针风险。
修正后的代码
public static String highestGradeName(int[] g, String[] n) { // 先做参数校验,避免空数组或长度不匹配的非法输入 if (g == null || n == null || g.length != n.length || g.length == 0) { throw new IllegalArgumentException("成绩数组和姓名数组必须非空且长度一致"); } int highest = g[0]; String highStudent = n[0]; // 初始化对应初始最高分的学生姓名 for (int i = 1; i < g.length; i++) { if (highest < g[i]) { highest = g[i]; // 更新当前最高分 highStudent = n[i]; // 同步更新对应的学生姓名 } // 若需处理多个同分最高分的情况,可在此处添加逻辑(比如保留第一个/收集所有姓名) } return highStudent; // 返回最终找到的最高分学生姓名 }
修正说明
- 参数校验:新增了对输入数组的合法性检查,提前抛出异常,避免后续逻辑因非法输入出错。
- 正确初始化变量:将
highStudent初始化为n[0],与初始最高分g[0]对应,符合变量初始化要求。 - 完整遍历数组:循环中仅更新最高分和对应姓名,不提前返回,确保遍历完整个数组找到真正的最高分。
- 合理返回值:最终返回找到的学生姓名,而非
null,保证合法输入下必有正确结果。
补充:如果存在多个学生分数同为最高分,当前代码会返回最后一个出现的最高分学生姓名;若需要返回第一个,只需将判断条件改为
highest <= g[i]即可,也可根据需求扩展逻辑收集所有最高分学生的姓名。
内容的提问来源于stack exchange,提问作者SlothMan
相关产品推荐
相关产品推荐

