【问题标题】:filling 2d array in java在java中填充二维数组
【发布时间】:2016-11-14 23:42:08
【问题描述】:

也许有人可以帮忙!

我需要输出如下数组:

但我有:

我需要在脚本中进行哪些更改?我不需要完整的脚本,只需要一些基本的想法,我可以如何改进它!

a = 1;
for (i=0; i<=9; i++)

    for (j=9-i; j>=6-i; j--) 
        if (j>=0) {
            A[i][j] = a; a=a+1;

【问题讨论】:

  • 欢迎来到 StackOverflow。首先,您可以通过删除链接来改进您的 question,而是将输出 text 复制/粘贴到问题中,以便我们可以读取/复制,比较您的文本指的是,很难处理图像(因此,通常是反对票)。谢谢!
  • 请提供您尝试实现的完整源代码,以便更好地理解您的问题。没有人会窃取您的代码。

标签: java arrays


【解决方案1】:

1) 使用嵌套循环时,我发现将循环变量命名为 rowcol 有助于明确哪个是哪个。

2) 使用递减计数器 (a) 向前循环遍历行和列,或者使用递增计数器向后循环遍历行和列。

【讨论】:

    【解决方案2】:

    以下是产生所需输出的工作代码:

    public static void main(String[] args) {
            int A[][] = new int[10][10];
            int a = 1;
            for(int i = 0; i <= 9; i++) {
                for(int j = 9 - i; j >= 6 - i; j--) {
                    if(j >= 0) {
                        A[9-i][j] = a;
                        a = a + 1;
                    }
                }
            }
    
            for(int i = 0; i <= 9; i++) {
                StringBuilder printString = new StringBuilder();
                for(int j = 0; j <= 9; j++) {
                    printString.append(A[i][j] + "\t");
                }
                System.out.println(printString);
            }
        }
    

    产生输出为:

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

    【讨论】:

    • 向后打印它们并不是使数组正确的解决方案。问题是关于让数组正确,而不是打印确切的输出。
    • @Andreas,解决方案很简单,而不是打印它,只需创建另一个数组并将这些值添加到其中。我认为否决答案没有任何意义。
    • 我投了反对票,因为答案对于解决正确构建 数组 的问题没有用。创建第二个数组几乎不是正确的答案,因为您所要做的就是正确构建它。
    • 好的 Andreas 先生,根据您的建议进行了修改 :-)
    【解决方案3】:

    您的代码几乎就在那里,除了您的行颠倒了。一个简单的解决方法是在分配值时反转行索引,即将A[i][j]更改为A[9-i][j]

    但是,这将为您带来正确的结果:

    • 如果您检查代码,您会注意到您在两个地方使用了9 - i,因此可能i 应该倒数。

    • 您可以考虑使用 advice of Extragorey 将变量命名为 rowcol 以阐明它们的含义。

    • 变量通常应在首次使用的地方声明。你没有显示你的声明,所以我在下面添加了它们。

    • a = a + 1 最好写成a++,它可以与A 的赋值内联完成。

    • 由于j 正在倒计时,所以j&gt;=0 检查应该只添加到循环条件中。

    • 您可以在 for 循环初始化程序部分声明和初始化多个变量,只要它们具有 ai 所做的相同类型即可。

    因此,这是精炼的代码:

    int[][] A = new int[10][10];
    for (int row = 9, a = 1; row >= 0; row--)
        for (int col = row; col >= row - 3 && col >= 0; col--) 
            A[row][col] = a++;
    for (int[] r : A) {
        for (int v : r)
            System.out.printf("%-4d", v);
        System.out.println();
    }
    

    输出

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-16
      • 2017-04-17
      • 2012-03-08
      • 2013-04-05
      • 1970-01-01
      相关资源
      最近更新 更多