黑马程序员技术交流社区

标题: 关于循环的一个课后练习,进度慢的朋友注意了! [打印本页]

作者: 李斌    时间: 2012-4-16 21:22
标题: 关于循环的一个课后练习,进度慢的朋友注意了!
看了毕老师的各种“*”类排列图形的循环语句的写发 自己也提了一个问题 希望和大家一起复习应用~
题目如下
*
    ***
*******
    ***
      *
需求:请用循环语句打印如上图形。
作者: 黄或俊    时间: 2012-4-17 00:59
class ForDemo
{       
        static int temp=5;
        public static void main(String[] args)
        {
                for (int i=1;i<=temp ;i++ )
                {
                        for (int a=f(i); a>=0;a-- )
                        {
                                System.out.print(" ");
                        }
                        for (int b=1;b<=i*(i-1)+1 ;b++ )
                        {
                                System.out.print("*");
                        }
                        System.out.print("\n");
                }
                for (int i=temp-1;i>0 ;i-- )
                {
                        for (int a=f(i); a>=0;a-- )
                        {
                                System.out.print(" ");
                        }
                        for (int b=1;b<=i*(i-1)+1 ;b++ )
                        {
                                System.out.print("*");
                        }
                        System.out.print("\n");
                }
        }
        public static int f(int n)
        {
                if (n==temp)
                {
                        return 0;
                }
                else
                {
                    return f(n+1)+n;
                }
        }
}
终于搞出来了,哎呀!但是感觉自己的代码不太优良,谁有好的代码分享一下

作者: 蒋亮    时间: 2012-4-17 01:32
黄或俊 发表于 2012-4-17 00:59
class ForDemo
{       
        static int temp=5;

朋友,你既然用了递归了,还将递归放到循环里面去,递归效率本来就差,这样,效率会更差的
作者: 蒋亮    时间: 2012-4-17 01:33
那个图形对吗?应该先是一个正三角,然后再一是个倒三角形吧?
作者: 曾虓    时间: 2012-4-17 02:20
本帖最后由 曾虓 于 2012-4-17 08:18 编辑

先猜测楼主要的图形大概是:
      *
    ***
*******
    ***
      *
然后开始分析,上层层次是3,星号依次是1,3,7。也就是2的一次方到2的3次方减1。左边空格分别规律是(7-1)/2.(7-3)/2,(7-7)/2.
分析完成,开始编码。
代码如下:
  1. public class Test {
  2.         public static void main(String[] args) {
  3.                 int num = 3;// 上层层次 改变即可改变图形
  4.                 int mathNum = (int) Math.pow(2, num);
  5.                 for (int i = 1; i <= num; i++) {// 上半部分循环
  6.                         int m = (int) Math.pow(2, i);
  7.                         for (int j = 1; j <= (mathNum - m) / 2; j++) {//输出空格
  8.                                 System.out.print(" ");
  9.                         }
  10.                         for (int j = 1; j <= m - 1; j++) {
  11.                                 System.out.print("*");
  12.                         }
  13.                         System.out.println();
  14.                 }
  15.                 for (int i = num - 1; i >= 1; i--) {// 下半部循环
  16.                         int m = (int) Math.pow(2, i);
  17.                         for (int j = (mathNum - m) / 2; j >= 1; j--) {//输出空格
  18.                                 System.out.print(" ");
  19.                         }
  20.                         for (int j = m - 1; j >= 1; j--) {
  21.                                 System.out.print("*");
  22.                         }
  23.                         System.out.println();
  24.                 }
  25.         }
  26. }
复制代码
结果如图:

把上层层次改为5,结果如图:








欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2