Java二维数组列最大值打印程序实现技术咨询
解决二维表格每列最大值的问题
嘿,我看了你的代码,发现几个小问题导致它没法正确输出每一列的最大值,咱们一步步来修正:
你的代码里的问题点
- 数组维度搞反了:你输入的是
col(列数)和row(行数),但创建数组时写的是int[][] table = new int [col][row];,这会把列当成了行的维度。Java里二维数组是table[行索引][列索引],所以正确的数组初始化应该是new int[row][col]。 - max初始化时机错误:你在读取元素前就把
max设为table[i][0],这时候这个位置还没被赋值,默认是0,如果列里的数都是负数,结果就会错。而且你现在的逻辑是在读取元素的同时找最大值,这样很容易混乱,最好先把所有数据都读进数组,再找最大值。 - 遍历逻辑不对:你现在的外层循环是列数,内层是行数,但结合错误的数组维度,实际是在处理“行”的最大值,而不是列的。
正确的实现代码
import java.util.Scanner; public class MaxColumnElement { public static void main(String[] args) { Scanner sc = new Scanner(System.in); // 先输入行数,再输入列数(符合常规的表格认知:行×列) System.out.print("请输入行数: "); int row = sc.nextInt(); System.out.print("请输入列数: "); int col = sc.nextInt(); // 初始化二维数组:row行,col列 int[][] table = new int[row][col]; // 第一步:先把所有数据读入数组 System.out.println("请输入表格数据(按行输入):"); for (int i = 0; i < row; i++) { for (int j = 0; j < col; j++) { table[i][j] = sc.nextInt(); } } // 第二步:遍历每一列,找出该列的最大值 for (int j = 0; j < col; j++) { // 初始化max为当前列第一行的元素,避免负数场景错误 int max = table[0][j]; // 遍历当前列的所有行 for (int i = 0; i < row; i++) { if (table[i][j] > max) { max = table[i][j]; } } System.out.println("第" + (j + 1) + "列的最大值是: " + max); } sc.close(); } }
代码解释
- 输入与数组初始化:先明确行数和列数,创建对应维度的二维数组,确保
table[i][j]代表第i行第j列的元素,符合日常对表格的认知。 - 读取数据:先把所有表格数据完整读入数组,这样后续找最大值时可以自由遍历,不会受输入顺序影响。
- 找列最大值:外层循环遍历每一列,内层循环遍历该列的所有行,每次比较更新最大值,最后输出该列的最大值。
- 边界处理:把max初始化为当前列的第一个元素,避免了负数场景下的错误(比如列里全是负数,初始0就会比所有元素大,导致结果错误)。
如果你坚持要按你原来的输入顺序(先列数再行数),只需要调整输入顺序和数组初始化的对应关系就行,但建议按行×列的逻辑来,更直观。
内容的提问来源于stack exchange,提问作者user12741421
相关产品推荐
相关产品推荐

