我试图接受多维矩阵作为输入,例如
1 2 3
3 1 5
1 9 7
这只是一个例子,我正在使用的那个更大,不同的输入可能是不同的行长度,行列。
在我的输入中,每行和每列的长度相等。
如何存储输入,可能是二维arraylist。我知道我必须将输入作为字符串,然后通过Integer.parseInt(string)
将它们解析为整数,我知道Scanner的方法.split(" ")
按空格分割输入,但是我如何分隔行以便可以提取下一行。
答案 0 :(得分:2)
因为你谈到用空格分割字符串和解析整数, 您的输入似乎是矩阵数据作为字符串。 你可以先分成几行, 然后到列, 并解析整数并收集二维数组或列表列表。
String input = "1 2 3\n" +
"3 1 5\n" +
"1 9 7";
int[][] matrix = Arrays.stream(input.split("\n"))
.map(s -> Arrays.stream(s.split(" "))
.mapToInt(Integer::parseInt)
.toArray())
.toArray(int[][]::new);
List<List<Integer>> listOfLists = Arrays.stream(input.split("\n"))
.map(s -> Arrays.stream(s.split(" "))
.map(Integer::parseInt)
.collect(Collectors.toList()))
.collect(Collectors.toList());
以旧式的迭代方式,这是同样的事情, 如果它更容易理解:
String[] lines = input.split("\n");
int[][] matrix = new int[lines.length][];
for (int i = 0; i < lines.length; i++) {
String[] columns = lines[i].split(" ");
matrix[i] = new int[columns.length];
for (int j = 0; j < columns.length; j++) {
matrix[i][j] = Integer.parseInt(columns[j]);
}
}
答案 1 :(得分:0)
假设你有一个读取输入线的扫描仪,这是一种方式
List<List<String>> matrix = new ArrayList<>();
while (sc.hasNextLine()) {
matrix.add(Arrays.asList(sc.nextLine().split(" "));
}
当然,可以根据需要更改数据类型
你也可以存放一个扁平的Arraylist。使用矩阵的宽度,您可以将行和列转换为索引
matrix[row][col] == list.get(col + row*matrix.width);