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

Java二维数组行平均分计算与等级赋值代码的作用域问题修正求助

问题分析与代码修正

你的代码存在多处逻辑错误,并非仅avg作用域问题,下面逐一说明并给出修正方案:

原代码核心问题

  • sum初始化位置错误:int sum=0;放在内部循环中,导致每次循环列时sum都会重置为0,无法累加整行分数
  • 判断条件无效:j==m永远不会触发,因为j的循环范围是0<=j<m,最大j值为m-1
  • 硬编码数组尺寸:直接写n=2,m=5,既不符合需求的2×3矩阵,也无法适配动态传入的数组
  • 返回逻辑错误:循环中直接return会只返回第一个学生的等级,无法处理所有学生的结果
  • avg未被正确赋值:因上述判断条件不触发,avg始终是初始值0,导致后续等级判断完全错误

修正后的代码

import java.util.Scanner;

public class Solution {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        // 需求为2×3的学生分数矩阵:2个学生,3科分数
        int studentNum = 2;
        int subjectNum = 3;
        int[][] mark = new int[studentNum][subjectNum];
        
        // 输入矩阵并输出原始二维数组
        System.out.println("输入的学生分数矩阵:");
        for (int i = 0; i < studentNum; i++) {
            for (int j = 0; j < subjectNum; j++) {
                mark[i][j] = sc.nextInt();
                System.out.print(mark[i][j] + " ");
            }
            System.out.println(); // 每行结束换行
        }
        
        // 获取所有学生的等级结果
        String[] results = grade(mark);
        System.out.println("\n学生等级结果:");
        for (int i = 0; i < results.length; i++) {
            System.out.println("学生" + (i+1) + ":" + results[i]);
        }
        sc.close();
    }

    public static String[] grade(int[][] mark) {
        // 动态获取学生数和科目数,避免硬编码
        int studentCount = mark.length;
        int subjectCount = mark[0].length;
        String[] grades = new String[studentCount];
        
        for (int i = 0; i < studentCount; i++) {
            int sum = 0; // 每个学生的总分从0开始累加
            for (int j = 0; j < subjectCount; j++) {
                sum += mark[i][j];
            }
            // 用double计算平均分,避免整数除法丢失精度
            double avg = (double) sum / subjectCount;
            // 根据规则评定等级
            grades[i] = avg > 40 ? "P" : "F";
            // 输出每行的累加和与平均分
            System.out.println("学生" + (i+1) + "总分:" + sum + ",平均分:" + avg);
        }
        return grades;
    }
}

关键修正点说明

  1. 调整sum的位置:将sum初始化移到学生循环外层,确保每个学生的分数从0开始累加
  2. 移除无效判断:直接在列循环结束后计算平均分,无需多余的j==m判断
  3. 动态获取数组尺寸:通过mark.length和mark[0].length获取学生数与科目数,代码适配性更强
  4. 返回所有学生等级:改用String[]数组返回每个学生的等级,满足多学生的结果输出需求
  5. 处理精度问题:将总分转为double后再计算平均分,避免整数除法导致的精度丢失(比如总分121、3科的情况,整数除法会得到40,实际是40.333,应判定为P)
  6. 补充输出逻辑:输入时同步输出原始二维数组,同时输出每行的累加和与平均分,满足需求中的输出要求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 06:57:21