Java 带有嵌套循环的 10x10 数组

Java 10x10 array with nested loop

我有一个 10x10 数组,我试图用嵌套循环填充它

int A[][] = new int [10][10];

到目前为止我已经创建了这个 -

C = 1;
        for (i=0; i<=9; i++)
            for (j=9-i; j>=7-i; j--) 
                 if (j>=0) {
                    A[i][j] = C; C=C+1;
                }

这是目前的result。

但我试图用两个 for 循环创建 this 但无法管理它。

感谢您的帮助!

这是我的版本。我从 Alex 的回答中借用了漂亮的 printf 格式 :) 我只想提两件事:

  1. 我认为如果将 i 和 j 称为 y 和 x 会更容易阅读
  2. 我好像记得,如果你需要性能,你需要沿着 x 轴遍历数组,因为这就是 CPU 获取缓存的方式(至少理论上是这样)。这会使算法有点复杂,但我想在这种情况下我们并不真正关心性能,所以在内部循环中使用 y 很好 :)
        int dimension = 10;
        int[][] result = new int[dimension][dimension];

        int C = 27;
        int yOffset = 9;
        for (int x = 0; x < dimension; x++) {
            for (int y = Math.min(2, yOffset); y >= 0 && yOffset - y >= 0; y--) {
                result[yOffset - y][x] = C--;
            }
            yOffset--;
        }

        for (int[] y : result) {
            for (int x : y) {
                System.out.printf("%2d  ", x);
            }
            System.out.println();
        }

输出

 0   0   0   0   0   0   0   6   3   1  
 0   0   0   0   0   0   9   5   2   0  
 0   0   0   0   0  12   8   4   0   0  
 0   0   0   0  15  11   7   0   0   0  
 0   0   0  18  14  10   0   0   0   0  
 0   0  21  17  13   0   0   0   0   0  
 0  24  20  16   0   0   0   0   0   0  
27  23  19   0   0   0   0   0   0   0  
26  22   0   0   0   0   0   0   0   0  
25   0   0   0   0   0   0   0   0   0 

这应该可以完成工作:

  • 像往常一样从 0 到 10 迭代行,将列索引设置为 9 并减少它
  • 在内循环中,设置从iMath.max(i - beltWidth + 1, 0)的范围(beltWidth是列中非零值的最大计数,在本例中是3).
final int size = 10;
final int beltWidth = 3;
int A[][] = new int [size][size];

int c = 1;
for (int i = 0, j = size - 1; i < size; i++, j--) {
    for (int k = i; k >= Math.max(i - beltWidth + 1, 0); k--) {
        A[k][j] = c++;
    }
}

for (int[] r : A) {
    for (int x : r) {
        System.out.printf("%2d  ", x);
    }
    System.out.println();
}

输出

 0   0   0   0   0   0   0   6   3   1  
 0   0   0   0   0   0   9   5   2   0  
 0   0   0   0   0  12   8   4   0   0  
 0   0   0   0  15  11   7   0   0   0  
 0   0   0  18  14  10   0   0   0   0  
 0   0  21  17  13   0   0   0   0   0  
 0  24  20  16   0   0   0   0   0   0  
27  23  19   0   0   0   0   0   0   0  
26  22   0   0   0   0   0   0   0   0  
25   0   0   0   0   0   0   0   0   0