我想弄清楚如何遍历二维数组。我这样做的方式是使用嵌套的 for 循环。我很想知道还有什么其他方法可以做到这一点。我只是觉得我重复使用嵌套的 for 循环并且不想这样做。
for(int i=0; i<gameBoard.length; i++) {
for(int j=0; j<gameBoard[i].length; j++) {
}
这是我知道如何访问数组中多个元素的唯一方法。还有其他方法可以遍历多维数组吗?
如果您正在寻找处理矩阵中元素的替代方法,您可以使用流。
IntStream
来打印 int
矩阵。请注意,这种方法绝对不会比传统的嵌套循环更有效。这只是一种替代方法。
int[][] gameboard = new int[][]{{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
IntStream.range(0, gameboard.length)
.boxed() // boxing each int row index to an Integer
.forEach(i -> { // process each i-th row
IntStream.range(0, gameboard[i].length) // creating a nested stream to process each element of the row
.boxed() // boxing each int column index to an Integer
.forEach(j -> System.out.printf("%d ", gameboard[i][j])); // printing the i-th j-th element
System.out.println();
});
这是没有索引的替代版本。
int[][] gameboard = new int[][]{{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
Arrays.stream(gameboard)
.forEach(vet -> {
Arrays.stream(vet)
.forEach(x -> System.out.printf("%d ", x));
System.out.println();
});
这是一个使用
filter
聚合操作的版本,因为您在注释中添加了您想要使用条件语句的信息。
int[][] gameboard = new int[][]{{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
Arrays.stream(gameboard)
.forEach(vet -> {
Arrays.stream(vet)
.filter(x -> x % 2 == 0) // filtering only for even numbers
.forEach(x -> System.out.printf("%d ", x));
System.out.println();
});