如何在Java中按列获取二维数组的最大与最小元素(已实现行方式)
按列获取二维数组的最大和最小元素
你已经成功实现了按行遍历二维数组并找出每行的最大、最小值,这个思路很清晰!现在要实现按列操作,核心是把遍历顺序调换过来:先遍历列,再遍历每一列对应的所有行,下面一步步给你讲解。
先回顾你的行实现代码
你写的按行求最值的代码如下:
public class Column { public static void main(String[] args) { int[][] data = { { 3, 2, 5,-45 }, { 1, 4, 4, -8 }, { 9, 6, -100, -2 }, {-10, 3, 1, -2 } }; for (int row = 0; row < data.length; row++) { int large = data[row][0], small = data[row][0]; for (int col = 0; col < data[row].length; col++) { if (large < data[row][col]) { large = data[row][col]; } if (small > data[row][col]) { small = data[row][col]; } } System.out.println("largest values:" + large); System.out.println("smallest values:" +small); } } }
输出结果:
largest values:5 smallest values:-45
largest values:4 smallest values:-8
largest values:9 smallest values:-100
largest values:3 smallest values:-10
按列求最值的实现思路
要按列处理,需要注意以下几点:
- 首先确定数组的列数:如果是规整的二维数组(每行长度相同),可以直接用
data[0].length;如果是不规则数组,需要先做边界判断(后面会提)。 - 外层循环遍历列索引,内层循环遍历每一列对应的所有行索引。
- 每列的初始最大、最小值要设为该列第一行的元素(
data[0][col]),然后和该列其他行的元素逐一比较。
按列求最值的完整代码
public class ColumnMaxMin { public static void main(String[] args) { int[][] data = { { 3, 2, 5, -45 }, { 1, 4, 4, -8 }, { 9, 6, -100, -2 }, {-10, 3, 1, -2 } }; // 假设是规整的二维数组,列数为第一行的长度 int columns = data[0].length; for (int col = 0; col < columns; col++) { // 初始化当前列的最大、最小值为该列第一行的元素 int colMax = data[0][col]; int colMin = data[0][col]; // 遍历该列的所有行(从第二行开始,因为第一行已经作为初始值) for (int row = 1; row < data.length; row++) { // 更新最大值 if (data[row][col] > colMax) { colMax = data[row][col]; } // 更新最小值 if (data[row][col] < colMin) { colMin = data[row][col]; } } // 输出当前列的结果 System.out.println("第" + (col + 1) + "列:"); System.out.println(" 最大值:" + colMax); System.out.println(" 最小值:" + colMin); } } }
代码输出结果
运行这段代码后,输出会是:
第1列:
最大值:9
最小值:-10
第2列:
最大值:6
最小值:2
第3列:
最大值:5
最小值:-100
第4列:
最大值:-2
最小值:-45
额外说明(处理不规则二维数组)
如果你的二维数组每行长度不一样(比如有的行多一列,有的行少一列),需要先处理边界情况:遍历列的时候,要确保当前行的列索引不越界。可以修改内层循环的判断条件,比如:
for (int row = 0; row < data.length; row++) { // 先判断当前行是否有该列的元素,避免索引越界 if (col < data[row].length) { if (data[row][col] > colMax) { colMax = data[row][col]; } if (data[row][col] < colMin) { colMin = data[row][col]; } } }
这样就能避免数组索引越界的问题啦~
内容的提问来源于stack exchange,提问作者Gokul Kannan
相关产品推荐
相关产品推荐

