如何按列而不是按行填充数组?

问题描述 投票:0回答:1

我需要制作一个 10 x 10 的二维数组,如下所示:

0 45 44 42 39 35 30 24 17 9
0 0  43 41 38 34 29 23 16 8
0 0  0  40 37 33 28 22 15 7
0 0  0  0  36 32 27 21 14 6
0 0  0  0  0  31 26 20 13 5
0 0  0  0  0  0  25 19 12 4
0 0  0  0  0  0  0  18 11 3
0 0  0  0  0  0  0  0  10 2
0 0  0  0  0  0  0  0  0  1
0 0  0  0  0  0  0  0  0  0

这就是我的代码的样子:

public class Main {
    public static void main(String[] args) {
        int[][] a = new int [10][10];
        int i = 45;
        for (int row = 0; row < 10; row++) {
            for (int col = 0; col < 10; col++) {
                if (row>col-1) {
                    System.out.print("0" + "  ");
                } else {
                    a[row][col]=i--;
                    System.out.print(a[row][col]+" ");
                }
            }
            System.out.println();
        }
    }
}

这是它在控制台中打印的结果:

0  45 44 43 42 41 40 39 38 37
0  0  36 35 34 33 32 31 30 29
0  0  0  28 27 26 25 24 23 22
0  0  0  0  21 20 19 18 17 16
0  0  0  0  0  15 14 13 12 11
0  0  0  0  0  0  10 9  8  7 
0  0  0  0  0  0  0  6  5  4 
0  0  0  0  0  0  0  0  3  2 
0  0  0  0  0  0  0  0  0  1 
0  0  0  0  0  0  0  0  0  0

我尝试更改内部和外部 for 循环的顺序,但它对我不起作用。

java arrays loops
1个回答
0
投票

不要正常迭代,而是从右下角向上并向左反向进行。

  • 使用嵌套循环。
  • 将值初始化为 1。
  • 然后按照建议进行迭代,并按照代码所示进行调整。
  • 将值分配给单元格并递增。
int [][] m = new int[10][10];
int value = 1;
for (int col = 9; col >= 0; col-- ) {
for (int row = col-1; row >= 0; row--) {
        m[row][col] = value++;  
    }
}

for (int[] row : m) {
    for (int i : row) {
        System.out.printf("%3d", i);
    }
    System.out.println();
}

打印

  0 45 44 42 39 35 30 24 17  9
  0  0 43 41 38 34 29 23 16  8
  0  0  0 40 37 33 28 22 15  7
  0  0  0  0 36 32 27 21 14  6
  0  0  0  0  0 31 26 20 13  5
  0  0  0  0  0  0 25 19 12  4
  0  0  0  0  0  0  0 18 11  3
  0  0  0  0  0  0  0  0 10  2
  0  0  0  0  0  0  0  0  0  1
  0  0  0  0  0  0  0  0  0  0
© www.soinside.com 2019 - 2024. All rights reserved.