【问题标题】:Java 10x10 array with nested loop带有嵌套循环的 Java 10x10 数组
【发布时间】:2021-02-26 11:34:44
【问题描述】:

我有一个 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 并且无法管理它。

感谢您的帮助!

【问题讨论】:

  • 您能否也说明您是如何得出结果的?
  • 我的意思是你如何打印你的结果。当我运行你的算法时,我的结果看起来不同(交换了 x 和 y 轴)
  • 不要包含任何可以作为文本放入的图像。请尽最大努力解决您的问题,就像您期望这里的志愿者为您解答一样。

标签: java arraylist nested nested-loops


【解决方案1】:

这是我的版本。我从亚历克斯的回答中借用了漂亮的 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 

【讨论】:

    【解决方案2】:

    这应该可以完成工作:

    • 像往常一样从 0 到 10 迭代行,将列索引设置为 9 并减小它
    • 在内部循环中,将范围设置为从i 到Math.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  
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-05
      • 1970-01-01
      • 2021-06-19
      • 2022-01-13
      • 1970-01-01
      相关资源
      最近更新 更多