我需要创建一个网格,用户可以通过添加行和列(r x c)来生成网格,但是我需要网格从升序到降序。
我创建了一种能够创建网格的方法:
static void createGrid(int n, int m){
int grid[][] = new int[n][m];
for(int i = grid.length - 1; i >= 0; i--) {
System.out.println();
for(int j = 0; j < grid.length; j++) {
grid[i][j] = i * n + j + 1;
System.out.print(grid[i][j] + "\t");
}
}}
现在的输出来自3x3:
7 8 9
4 5 6
1 2 3
预期输出应为
1 2 3
4 5 6
7 8 9
答案 0 :(得分:3)
从更改外部for循环:
for(int i = grid.length - 1; i >= 0; i--) {
至:
for(int i = 0; i < grid.length ; i++) {
答案 1 :(得分:2)
只是让您的外循环朝另一个方向前进。正如@Thomas指出的那样,您的代码还有其他问题(感谢Thomas!)。仅当两个输入值相同时,您的代码才可用。这是代码,其中包含三个更改,以使其能够正确生成非正方形网格:
static void createGrid(int n, int m){
int grid[][] = new int[n][m];
for(int i = 0 ; i < n; i++) {
System.out.println();
for(int j = 0; j < m; j++) {
grid[i][j] = i * m + j + 1;
System.out.print(grid[i][j] + "\t");
}
}
}
public static void main(String... args) {
createGrid(4, 6);
}
结果:
1 2 3 4 5 6
7 8 9 10 11 12
13 14 15 16 17 18
19 20 21 22 23 24
我一直在学习Java Streams。我利用这次机会尝试在一行中对Stream进行此操作。此代码与我的第一个版本具有相同的作用:
static void createGrid(int n, int m) {
IntStream.range(0, n * m).mapToObj(i -> (i+1) + ((i%m == m-1)? "\n" : "\t")).forEach(System.out::print);
}