如何合并求二维数组最高行/列平均值的两个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; }
解决方案
错误原因说明
- 不可达语句:第一个
return之后的代码永远不会被执行,因为return会直接终止方法,这就是报错的核心原因。 - 列计算逻辑错误:原
findHighestColumn方法实际计算的还是行的平均值,正确的列计算应该是遍历列索引,再对每一列遍历所有行的对应元素求和。 - 返回值类型错误:合并后的方法需要返回字符串,而非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); } }
代码说明
- 行计算:遍历每一行求和并计算平均值,实时记录最大平均值及对应行索引。
- 列计算:遍历列索引,对每一列遍历所有行的对应元素求和计算平均值,同时增加数组合法性校验,避免不规则数组导致的越界错误。
- 结果处理:比较行和列的最大平均值,返回符合要求的字符串格式;若平均值相等,可自行调整返回规则。
- 返回值修正:将方法返回类型改为
String,完全匹配需求。
内容的提问来源于stack exchange,提问作者MazaPan616
相关产品推荐
相关产品推荐

