如何读取文件中的阶梯型矩阵并实现原格式输入输出?
优化Java代码以支持阶梯型矩阵的读取与写入
原代码的核心问题是依赖固定列数的二维数组存储数据,无法适配阶梯型矩阵每行元素数量不同的场景。下面是优化后的完整代码,支持读取任意行、每行元素数量可不同的阶梯型矩阵,并按原格式写入output.txt:
void readAndWriteMtx() throws IOException { // 读取input.txt中的阶梯型矩阵 List<List<Double>> matrix = new ArrayList<>(); try (BufferedReader br = new BufferedReader(new FileReader("input.txt"))) { String line; while ((line = br.readLine()) != null) { // 处理首尾空白,支持多空格分隔元素 String[] elements = line.trim().split("\\s+"); List<Double> row = new ArrayList<>(); for (String elem : elements) { row.add(Double.parseDouble(elem)); } matrix.add(row); } } // 将矩阵按原格式写入output.txt try (BufferedWriter bw = new BufferedWriter(new FileWriter("output.txt"))) { for (List<Double> row : matrix) { StringBuilder sb = new StringBuilder(); for (int i = 0; i < row.size(); i++) { sb.append(row.get(i)); if (i != row.size() - 1) { sb.append(" "); } } bw.write(sb.toString()); bw.newLine(); } } // 控制台输出验证结果 for (List<Double> row : matrix) { System.out.println(row); } }
关键改动说明:
- 存储结构替换:用
List<List<Double>>替代固定维度的Double[][],每个子列表对应矩阵的一行,长度可自由变化,完美适配阶梯型矩阵。 - 读取逻辑优化:用
trim()清理每行首尾空白,\\s+分割元素(兼容多空格分隔场景);只遍历当前行的实际元素数量,彻底避免数组越界问题。 - 新增写入功能:通过
BufferedWriter将矩阵按原格式写入文件,每行元素用空格分隔,保证输入输出格式一致。 - 资源自动管理:采用try-with-resources语法包裹流操作,无需手动关闭流,避免资源泄漏。
内容的提问来源于stack exchange,提问作者vegaLDN
相关产品推荐
相关产品推荐

