日期:2014-05-20  浏览次数:20703 次

一打印菱形代码,请教!
public   class   Test  
{
      public   static   void   main(String   args[])  
      {
        int   line   =   Integer.parseInt(args[0]);
        int   n   =   -line;
          do   {
                    show(Math.abs(n), '   ');
                    show((line-Math.abs(n))*2+1, '* ');
                    System.out.println();
                        n++;
          }while   (n <=line);
}
  public   static   void   show(int   i,char   c)
    {
          for   (int   n   =   0;n <i;n++)  
            {
                System.out.print(c);
            }
      }
}


------解决方案--------------------
args[0] 只是初始的, 打印 '* '的个数就是 (line-Math.abs(n))*2+1, 也就是i
------解决方案--------------------
不是啊 args[0] 就是你的要打印的菱形的行数,其实它的值 x * 2 + 1=你菱形的最大行的*个数
你可以看一下你的程序
他是这样的,如果你输入了10

1==〉先打10 个空格 (show(Math.abs(n), ' ');) , 然后打一个*( show((line-Math.abs(n))*2+1, '* ');), 再换行(System.out.println();),所以它不是对称打印,只是打印,每行的最后一个* 后面不是和同一行第一个*前面同样个数的空格,而是一个回车换行符

2==〉你的n = -line 所以空格会越来越少,因为abs(n+1) < abs(n),但是当n 〉=0之后 abs(n+1) > abs(n) 此时 空格越来越多

3==〉再看你的星号公式 (line-Math.abs(n)) * 2 + 1 ,首先你的(abs(n))递减,所以*越来越多,当n为非负时,此时 * 会减小。正好在[-n,n]的区间内完成了上下两个对称的三角形,而不是左右对称