Java二维数组(matrix)逐行求和并删除最小和行生成新矩阵问题
Java 实现移除矩阵行和最小行的方案
实现逻辑
- 先扫描输入得到原始二维矩阵,同时计算每行元素和,存入一维数组
rowSums,数组下标对应原矩阵的行号 - 遍历
rowSums找到最小值对应的行索引,若存在多个行和同为最小值,默认取第一个出现的行 - 生成新矩阵:新矩阵行数为原矩阵行数减1,列数和原矩阵一致,遍历原矩阵,跳过行和最小的行,将剩余行拷贝到新矩阵即可
完整代码示例
import java.util.Scanner; public class MatrixProcess { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); // 1. 输入矩阵的行和列 System.out.print("请输入矩阵的行数:"); int rows = scanner.nextInt(); System.out.print("请输入矩阵的列数:"); int cols = scanner.nextInt(); int[][] originalMatrix = new int[rows][cols]; int[] rowSums = new int[rows]; // 2. 扫描输入矩阵,同时计算行和 System.out.println("请输入矩阵元素,按行输入:"); for (int i = 0; i < rows; i++) { int sum = 0; for (int j = 0; j < cols; j++) { originalMatrix[i][j] = scanner.nextInt(); sum += originalMatrix[i][j]; } rowSums[i] = sum; } // 3. 找到行和最小的行索引 int minSumIndex = 0; for (int i = 1; i < rowSums.length; i++) { if (rowSums[i] < rowSums[minSumIndex]) { minSumIndex = i; } } // 4. 生成不包含最小行的新矩阵 int[][] newMatrix = new int[rows - 1][cols]; int newRow = 0; for (int i = 0; i < rows; i++) { if (i != minSumIndex) { // 拷贝当前行到新矩阵 System.arraycopy(originalMatrix[i], 0, newMatrix[newRow], 0, cols); newRow++; } } // 5. 打印验证结果 System.out.println("移除行和最小行后的新矩阵:"); for (int[] row : newMatrix) { for (int num : row) { System.out.print(num + "\t"); } System.out.println(); } scanner.close(); } }
特殊场景说明
如果需要删除所有行和等于最小值的行,只需修改新矩阵生成逻辑:
- 先统计行和等于最小值的行数,计算新矩阵的行数 = 原行数 - 最小行数量
- 遍历原矩阵时,跳过所有行和等于最小值的行即可
内容的提问来源于stack exchange,提问作者Miodrag Mihajlov
相关产品推荐
相关产品推荐

