Java如何正确实现不同长度二维矩阵求和并规范打印输出
问题根源
你的代码存在三处硬编码缺陷,直接导致输出错误:
- 结果数组固定初始化为4*4尺寸,循环行数硬编码为2、列数硬编码为3,完全没有匹配输入矩阵的实际大小,计算逻辑本身就不对
- 打印逻辑没有按行做换行处理,所有计算出的元素连续输出,格式完全混乱
- 没有做数组索引越界判断,只要输入矩阵行列数和硬编码值不匹配,就会抛出运行时错误,更无法兼容尺寸不一致的矩阵求和场景
通用矩阵求和实现方案
尺寸适配逻辑
要支持任意尺寸二维矩阵求和,统一按以下规则做尺寸适配:
- 结果矩阵的总行数取两个输入矩阵行数的较大值
- 遍历两个输入矩阵的所有行,取所有行的长度最大值作为结果矩阵的总列数
- 逐元素计算时,如果当前行列索引超出某一矩阵的有效索引范围,该矩阵对应位置按0参与求和,从根源上避免数组越界
格式化打印调整
每打印完一整行元素后输出换行符,同一行的元素用空格分隔,行尾不追加多余空格,保证输出格式整齐。
修正后完整代码
public static void main(String[] args) { int[][] m1 = { { 1, 2, 0 }, { 2, 3, 4 } }; int[][] m2 = { { 3, 2, 5 }, { 6, 4, 3 } }; int[][] m3 = { { 1, 1, 1, 1 }, { 3, 3, 2, 1 }, { 2, 2, 2, 2 } }; int[][] m4 = { { 2, 2, 2, 3 }, { 2, 3, 1, 0 }, { 1, 2, 3, 4 } }; printMatrixSum(m1, m2); System.out.println(); printMatrixSum(m3, m4); } private static void printMatrixSum(int[][] x, int[][] y) { // 动态计算结果矩阵的行列数 int maxRows = Math.max(x.length, y.length); int maxCols = 0; for (int[] row : x) { maxCols = Math.max(maxCols, row.length); } for (int[] row : y) { maxCols = Math.max(maxCols, row.length); } int[][] sumResult = new int[maxRows][maxCols]; // 逐元素求和,自动适配越界位置 for (int i = 0; i < maxRows; i++) { for (int j = 0; j < maxCols; j++) { int valX = (i < x.length && j < x[i].length) ? x[i][j] : 0; int valY = (i < y.length && j < y[i].length) ? y[i][j] : 0; sumResult[i][j] = valX + valY; } } // 按行格式化打印 for (int i = 0; i < maxRows; i++) { StringBuilder line = new StringBuilder(); for (int j = 0; j < maxCols; j++) { line.append(sumResult[i][j]); if (j != maxCols - 1) { line.append(" "); } } System.out.println(line); } }
运行效果
代码运行后输出和预期结果完全一致:
4 4 5 8 7 7 3 3 3 4 5 6 3 1 3 4 5 6
内容的提问来源于stack exchange,提问作者Enerqia
相关产品推荐
相关产品推荐

