我如何从顶部开始到底部开始网格

时间:2019-05-10 14:47:48

标签: java

我需要创建一个网格,用户可以通过添加行和列(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

2 个答案:

答案 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);
}
相关问题