java如何输入矩阵
输入矩阵的方法
在Java中,输入矩阵可以通过多种方式实现,具体取决于输入来源(如用户输入、文件读取等)。以下是几种常见的方法:
从控制台输入矩阵
使用Scanner类从控制台逐行或逐个元素读取矩阵数据:

import java.util.Scanner;
public class MatrixInput {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("输入矩阵的行数: ");
int rows = scanner.nextInt();
System.out.print("输入矩阵的列数: ");
int cols = scanner.nextInt();
int[][] matrix = new int[rows][cols];
System.out.println("输入矩阵元素(逐行输入,空格分隔):");
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
matrix[i][j] = scanner.nextInt();
}
}
scanner.close();
}
}
从文件读取矩阵
通过BufferedReader读取文本文件中的矩阵数据:

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
public class MatrixFromFile {
public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new FileReader("matrix.txt"));
String line;
int[][] matrix;
int rows = 0;
int cols = 0;
// 先确定行数和列数
while ((line = reader.readLine()) != null) {
rows++;
String[] elements = line.trim().split("\\s+");
cols = elements.length;
}
reader.close();
// 重新读取并填充矩阵
reader = new BufferedReader(new FileReader("matrix.txt"));
matrix = new int[rows][cols];
int row = 0;
while ((line = reader.readLine()) != null) {
String[] elements = line.trim().split("\\s+");
for (int col = 0; col < cols; col++) {
matrix[row][col] = Integer.parseInt(elements[col]);
}
row++;
}
reader.close();
}
}
使用Java 8的流式处理
对于简单的矩阵输入,可以使用Java 8的流式API简化代码:
import java.util.Arrays;
import java.util.Scanner;
import java.util.stream.IntStream;
public class MatrixStreamInput {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("输入矩阵的行数: ");
int rows = scanner.nextInt();
System.out.print("输入矩阵的列数: ");
int cols = scanner.nextInt();
int[][] matrix = IntStream.range(0, rows)
.mapToObj(i -> Arrays.stream(new int[cols])
.map(j -> scanner.nextInt())
.toArray())
.toArray(int[][]::new);
scanner.close();
}
}
处理不规则矩阵
如果输入可能包含不规则矩阵(每行列数不同),可以使用动态数据结构:
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class IrregularMatrix {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
List<List<Integer>> matrix = new ArrayList<>();
System.out.println("输入矩阵行(每行以空格分隔,空行结束):");
while (scanner.hasNextLine()) {
String line = scanner.nextLine().trim();
if (line.isEmpty()) break;
List<Integer> row = new ArrayList<>();
for (String num : line.split("\\s+")) {
row.add(Integer.parseInt(num));
}
matrix.add(row);
}
scanner.close();
}
}
注意事项
- 输入验证:确保对用户输入的行列数和元素进行有效性检查。
- 异常处理:使用
try-catch处理可能的输入格式错误或文件读取异常。 - 性能优化:对于大型矩阵,避免多次重新分配内存或重复读取文件。
- 资源释放:确保关闭
Scanner或BufferedReader等资源。






