Java如何获取二维数组每行的最大值?已有全局最值实现遇问题
获取二维数组每行的最大值
我原本实现了获取二维数组全局最大值和最小值的功能,现在想修改代码来获取数组每行的最大值,但操作后得到了不符合预期的输出结果。
原代码
public class Main { public static void main ( String[] args ) { int[][] data = { {3, 2, 5}, {1, 4, 4, 8, 13}, {9, 1, 0, 2}, {0, 2, 6, 3, -1, -8} }; int max = data[0][0]; int min = data[0][0]; for ( int row=0; row < data.length; row++) { for ( int col=0; col < data[row].length; col++) { if (data[row][col] > max){ max = data[row][col]; } if (data[row][col] < min){ min = data[row][col]; } } } System.out.println( "max = " + max + "; min = " + min ); } }
错误输出
2 5 4 4 8 1 3 1 1 2 2 6 6 6 6
解决方案
要实现每行最大值的计算,核心是为每一行单独初始化最大值,而非使用全局变量累积所有行的极值。具体修改如下:
- 将最大值变量的初始化移到外层循环内部,每次处理新行时,把最大值设为当前行的第一个元素
- 移除不需要的最小值变量及相关判断逻辑
- 每行遍历完成后,立即输出当前行的最大值
修改后的完整代码:
public class Main { public static void main ( String[] args ) { int[][] data = { {3, 2, 5}, {1, 4, 4, 8, 13}, {9, 1, 0, 2}, {0, 2, 6, 3, -1, -8} }; for ( int row=0; row < data.length; row++) { // 初始化当前行的最大值为该行第一个元素 int rowMax = data[row][0]; for ( int col=0; col < data[row].length; col++) { if (data[row][col] > rowMax){ rowMax = data[row][col]; } } // 输出当前行的最大值 System.out.println("第" + (row+1) + "行最大值:" + rowMax); } } }
问题说明
原代码的max是全局变量,会持续累积所有行的最大值,无法单独记录每行的极值,这是导致输出混乱的根本原因。修改后,每次进入新行时都会重置最大值变量,遍历完成后得到的就是当前行的最大值,输出结果也会符合预期。
内容的提问来源于stack exchange,提问作者Nathan Sarabin
相关产品推荐
相关产品推荐

