You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何找出数组中的最大值?学生成绩数组关联姓名的代码求助

问题排查与代码修正

咱们一步步拆解你代码里的问题,然后把它修正过来:

你的代码存在的核心问题

  • 局部变量未初始化:你声明了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; // 返回最终找到的最高分学生姓名
}

修正说明

  1. 参数校验:新增了对输入数组的合法性检查,提前抛出异常,避免后续逻辑因非法输入出错。
  2. 正确初始化变量:将highStudent初始化为n[0],与初始最高分g[0]对应,符合变量初始化要求。
  3. 完整遍历数组:循环中仅更新最高分和对应姓名,不提前返回,确保遍历完整个数组找到真正的最高分。
  4. 合理返回值:最终返回找到的学生姓名,而非null,保证合法输入下必有正确结果。

补充:如果存在多个学生分数同为最高分,当前代码会返回最后一个出现的最高分学生姓名;若需要返回第一个,只需将判断条件改为highest <= g[i]即可,也可根据需求扩展逻辑收集所有最高分学生的姓名。

内容的提问来源于stack exchange,提问作者SlothMan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 07:49:13