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

如何合并求二维数组最高行/列平均值的两个Java方法?

合并二维数组行/列最高平均值方法的问题

我现在有两个方法:一个用来找出二维double数组中平均值最高的行,另一个用来找出平均值最高的列。想把这两个方法合并成一个,方法参数是double类型二维数组,返回类似"R3"(表示第3行)或"C3"(表示第3列)的字符串。

尝试用四层for循环实现时,出现了unreachable statement错误,因为不能用两次return;另外也不清楚怎么把结果转成要求的字符串格式。

现有两个方法代码

public static double findHighestRow(double[][] grid) {
        int i, j;
        double sum = 0;
        double average = 0;
        double averageGreater = 0;
        
        for (i = 0; i < grid.length; i++) {
            for (j = 0; j < grid[i].length; j++) {
                sum = sum + grid[i][j];
            }
            average=sum/grid[i].length;
            sum=0;
            averageGreater = Math.max(average, sum / grid[i].length);
            System.out.println("Average of row " + (i+1) + " = " + average);
        }

        System.out.println(" row with highest average is " + (i) + " = " + averageGreater);
        return averageGreater;
    }
    
    public static double findHighestColumn(double grid[][]) {
        int k, l;
        double sum2 = 0;
        double average2 = 0;
        double averageGreater2 = 0;
        
        for (k = 0; k < grid.length; k++) {
            for (l = 0; l < grid[k].length; l++) {
                sum2=sum2+grid[k][l];
            }
            average2=sum2/grid[k].length;
            sum2 = 0;
            averageGreater2 = Math.max(average2, sum2 / grid[k].length);
            System.out.println("Average of column " + (k+1) + " = " + average2);
        }
        
        System.out.println(" column with highest average is " + (k) + " = " + averageGreater2);
        return averageGreater2;
    }

尝试合并但失败的代码

public static double findHighestRow(double[][] grid) {
        int i, j;
        double sum = 0;
        double average = 0;
        double averageGreater = 0;
        
        for (i = 0; i < grid.length; i++) {
            for (j = 0; j < grid[i].length; j++) {
                sum = sum + grid[i][j];
            }
            average=sum/grid[i].length;
            sum=0;
            averageGreater = Math.max(average, sum / grid[i].length);
            System.out.println("Average of row " + (i+1) + " = " + average);
        }
        
        System.out.println(" row with highest average is " + (i) + " = " + averageGreater);
        return averageGreater;
        
        int k, l;
        double sum2 = 0;
        double average2 = 0;
        double averageGreater2 = 0;
        
        for (k = 0; k < grid.length; k++) {
            for (l = 0; l < grid[k].length; l++) {
                sum2=sum2+grid[k][l];
            }
            average2=sum2/grid[k].length;
            sum2 = 0;
            averageGreater2 = Math.max(average2, sum2 / grid[k].length);
            System.out.println("Average of column " + (k+1) + " = " + average2);
        }
        
        System.out.println(" column with highest average is " + (k) + " = " + averageGreater2);
        return averageGreater2;
    }

解决方案

错误原因说明

  1. 不可达语句:第一个return之后的代码永远不会被执行,因为return会直接终止方法,这就是报错的核心原因。
  2. 列计算逻辑错误:原findHighestColumn方法实际计算的还是行的平均值,正确的列计算应该是遍历列索引,再对每一列遍历所有行的对应元素求和。
  3. 返回值类型错误:合并后的方法需要返回字符串,而非double类型。

合并后的正确代码

public static String findHighestAverage(double[][] grid) {
    // 处理行的最高平均值
    double maxRowAvg = Double.MIN_VALUE;
    int maxRowIndex = 0;
    for (int i = 0; i < grid.length; i++) {
        double sum = 0;
        for (double num : grid[i]) {
            sum += num;
        }
        double avg = sum / grid[i].length;
        System.out.println("Average of row " + (i + 1) + " = " + avg);
        if (avg > maxRowAvg) {
            maxRowAvg = avg;
            maxRowIndex = i;
        }
    }
    System.out.println("Row with highest average is " + (maxRowIndex + 1) + " = " + maxRowAvg);

    // 校验数组合法性,避免空数组或不规则数组报错
    if (grid.length == 0 || grid[0].length == 0) {
        return "Invalid grid";
    }
    // 处理列的最高平均值
    double maxColAvg = Double.MIN_VALUE;
    int maxColIndex = 0;
    int colCount = grid[0].length;
    for (int j = 0; j < colCount; j++) {
        double sum = 0;
        for (double[] row : grid) {
            if (j >= row.length) {
                return "Irregular grid";
            }
            sum += row[j];
        }
        double avg = sum / grid.length;
        System.out.println("Average of column " + (j + 1) + " = " + avg);
        if (avg > maxColAvg) {
            maxColAvg = avg;
            maxColIndex = j;
        }
    }
    System.out.println("Column with highest average is " + (maxColIndex + 1) + " = " + maxColAvg);

    // 比较行和列的最高平均值,返回结果
    if (maxRowAvg > maxColAvg) {
        return "R" + (maxRowIndex + 1);
    } else if (maxColAvg > maxRowAvg) {
        return "C" + (maxColIndex + 1);
    } else {
        // 平均值相等时,可按需调整返回规则,这里默认返回行
        return "R" + (maxRowIndex + 1);
    }
}

代码说明

  1. 行计算:遍历每一行求和并计算平均值,实时记录最大平均值及对应行索引。
  2. 列计算:遍历列索引,对每一列遍历所有行的对应元素求和计算平均值,同时增加数组合法性校验,避免不规则数组导致的越界错误。
  3. 结果处理:比较行和列的最大平均值,返回符合要求的字符串格式;若平均值相等,可自行调整返回规则。
  4. 返回值修正:将方法返回类型改为String,完全匹配需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 13:50:25