将此模式推广为“n”行

时间:2012-07-15 14:51:17

标签: java loops console

对于家庭作业,我需要帮助来概括用于打印以下图案的代码。

   A
  B C  
 D E F 
G H I J

问题在于对字母表之间的空格进行编码 这就是我提出的,但它仅适用于模式的前4行。
(对不起,我的格式化技巧很差>。>)

int r = 65;
char m ;
int count=0;
for(int i = 4;i>0;i--)
{
    for( int j = i;j>0;j--)
        {System.out.print(" ");}
    for(int j = 4-i;j>=0;j--)
        {
             count++;
             m=(char)r;
             if(count == 3||count == 6||count == 8 || count == 11|| count == 13|| count ==15)
             {
                 System.out.print(" ");r--; 

             }
                 else
                     System.out.print(m);r++;
        }
    for(int j = 4-i;j>0;j--)
        {
            count++;m=(char)r;
            if(count == 3||count == 6||count == 8 || count == 11|| count == 13|| count ==15)
            {
                System.out.print(" ");r--;
            }
                    else
                        System.out.print(m);r++;
        }                                                                               
            System.out.println("");
} 
感谢Gene的解释,我做了一些编辑,这就是我想出的。

            int r = 65;
char m ;
for(int i = 4;i>0;i--)
    {
        for( int j = i;j>0;j--)
            {System.out.print(" ");}
        for(int j = 4-i;j>=0;j--)
    {
         m=(char)r;

            System.out.print(m+" ");
            r++;
    }
            System.out.println("");
    }

2 个答案:

答案 0 :(得分:1)

编写循环就是使用数学(通常是简单的数学)来描述循环指示的一次迭代。

N为行数,以便i=0,1,...N-1为其索引。

首先,您的示例显示行i具有N-i-1个前导空格。我们来看看吧。对于行i=N-1,我们得到零;对于i=0,我们得到N-1。在你的例子中,i=0的情况是3.这与绘图一致,所以我们看起来很好。

第二部分是每行有i+1个字符。除了最后一个以外,所有人都有以下空间最后一个有以下换行符。

最后,我们只需从A开始就可以得到正确的字母,并在每次打印新字母时递增。

所以现在我们已经准备好编写代码了:

char ltr = 'A';
for (int i = 0; i < N; i++) {

  // Print the leading spaces.
  int nLeadingSpaces = N - i - 1;
  for (int j = 0; j < nLeadingSpaces; j++) 
    System.out.print(' ');

  // Print the letters for this row.  There are
  // i+1 of them. So print the first i with a following
  // space and the last one with a newline.
  for (int j = 0; j < i; j++) 
    System.out.print(ltr++ + " ");
  System.out.println(ltr++);
}

这是未经测试但应该有用。

答案 1 :(得分:-1)

您需要两个(嵌套)循环。

行号的外部。

行中位置的内部。

您需要在循环外为当前字符定义的变量。

在内部循环的开头,根据最大行写出空格 - 当前行号* const(自己计算出const)。

在内部循环中输出当前字符和空格。

在内循环结束时增加输出字符。

在外循环结束时,进入下一行。