A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 陈圳 高级黑马   /  2013-2-22 08:55  /  2838 人查看  /  14 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 陈圳 于 2013-2-25 14:40 编辑

我按照题意写出来,总感觉这样特点别扭.完全是为了做出来而做出来,
能否用一个函数两个参数就控制输出.这样既简化了代码,又减少了for和运算.
但是自己功力又不够,所以请大家一起优化一下.
class Demo
{
        public static void main(String[] args)
        {
                BinaryDemo b=new BinaryDemo();
                b.mTriangle(5);
                b.hTriangle(5);
        }
        public void mTriangle(int x)   //三角形向下打印函数
        {
                for(int n=0;n<x;n++) //打印行数
                {
                        for(int m=0;m<n;m++)
                                System.out.print(' ');
                        for(int t=n;t<x;t++) //打印空格
                                System.out.print("* ");
                        if(n<x-1)      //控制最后一个不输出换行
                                System.out.println();
                }
        }
        public void hTriangle(int x)   //三角形向上打印函数
**        {
                for(int n=0;n<x;n++)//打印行数
                {
                        for(int m=n;m<x-1;m++) //打印空格
                                System.out.print(' ');
                        for(int t=0;t<=n;t++)
                        {
                                if(n>0)  //控制向上三角形头部不要输出. 第一句输出:*  *
                                        System.out.print("* ");
                        }
                        System.out.println();
                }
        }
}

打印结果:
* * * * *
* * * *
  * * *
   * *
    *
   * *
  * * *
* * * *
* * * * *



14 个回复

倒序浏览
本帖最后由 侯国奇 于 2013-2-22 11:34 编辑

看看这个:
  1. /*

  2. * * * * *
  3. * * * *
  4.   * * *
  5.    * *
  6.     *
  7.    * *
  8.   * * *
  9. * * * *
  10. * * * * *      

  11. */

  12. class  Triangle
  13. {
  14.         public static void main(String[] args)
  15.         {
  16.                 for (int x=0; x<5; x++ )  //DownTriangle
  17.                 {
  18.                         if(x==4) continue;
  19.                         for(int y=0; y<x; y++)
  20.                         {
  21.                                 System.out.print(" ");
  22.                         }
  23.                         for(int z=x; z<5; z++)
  24.                         {
  25.                                 System.out.print("* ");
  26.                         }

  27.                         System.out.println();
  28.                 }
  29.                
  30.                 for (int x=0; x<5; x++)  //UpTriangle
  31.                 {
  32.                         for(int y=x+1; y<5; y++)
  33.                         {
  34.                                 System.out.print(" ");
  35.                         }
  36.                         for(int z=0; z<=x; z++)
  37.                         {
  38.                                 System.out.print("* ");
  39.                         }

  40.                         System.out.println();
  41.                 }
  42.         }
  43. }
复制代码
回复 使用道具 举报
这样应该可以了
  1. class Demo
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 BinaryDemo b=new BinaryDemo();
  6.                 b.mTriangle(5,5);
  7.                
  8.         }
  9.         public void mTriangle(int x,int y)   //三角形向下打印函数
  10.         {
  11.                 for(int n=0;n<x;n++) //打印行数
  12.                 {
  13.                         for(int m=0;m<n;m++)
  14.                                 System.out.print(' ');
  15.                         for(int t=n;t<x;t++) //打印空格
  16.                                 System.out.print("* ");
  17.                         if(n<x-1)      //控制最后一个不输出换行
  18.                                 System.out.println();
  19.                 }
  20.         
  21.                 for(int n=0;n<y;n++)//打印行数
  22.                 {
  23.                         for(int m=n;m<y-1;m++) //打印空格
  24.                                 System.out.print(' ');
  25.                         for(int t=0;t<=n;t++)
  26.                         {
  27.                                 if(n>0)  //控制向上三角形头部不要输出. 第一句输出:*  *
  28.                                         System.out.print("* ");
  29.                         }
  30.                         System.out.println();
  31.                 }
  32.         }
  33. }
复制代码
回复 使用道具 举报
我修改的代码如下:



class Demo
{
        public static void main(String[] args)
        {
               Demo b=new Demo();
                b.mTriangle(5);
         }
        public void mTriangle(int x)   
        {
                for(int n=-4;n<x;n++) //打印行数,从-4到4一共9行
                {
                        int f=4-Math.abs(n);//获取空格的个数
                        for(int m=0;m<f;m++) //打印空格
                                System.out.print(' ');
                        for(int t=0;t<x-f;t++) //打印*号
                                System.out.print("* ");
                       System.out.println();
                }
        }
      
}


通过int f=4-Math.abs(n);//获取空格的个数,即
第一行:n=-4,空格个数为0,f=0
第二行:n=-3,空格个数为1,f=1
……
第四行:n=0,空格个数为4,f=4
……
第九行:n=4,空格个数为0,f=0;
所以我设定f=4--Math.abs(n);


由于每一行的打印个数都为x
所以打印*的个数就为x(每行总个数)-f(每行的空格个数)



你运行一下,看看是不是你要的结果。

点评

给力!就是这样.总感觉我那写的没有把上下两种融合到一起.虽然也实现了.但效率低  发表于 2013-2-22 11:06
回复 使用道具 举报
我记得我不是第二个回答的??怎么变成第三个了 邪门啊
回复 使用道具 举报
网络问题么?O(∩_∩)O哈哈~
回复 使用道具 举报
怎么不加分啊?
回复 使用道具 举报
陈圳 高级黑马 2013-2-25 13:44:24
8#
偏執旳、靑春 发表于 2013-2-25 13:27
怎么不加分啊?

你咋老瞅着这帖子就想着加分呢...每一期的版主都是从黑马预备军中挑选出来的,他们也准备读黑或相关专业.每一期只开设版面只开两至三个月,17期马上要开了.版主们这几天忙着上北京呢.如果想多拿点分,等18期开版,那时候人多,回答问题或者问问题都会得分.哎话说我从前三天泡论坛,现在收益是越来越低了.刚开始一天可以得8-9分,现在一天,1-2分...
回复 使用道具 举报
陈圳 发表于 2013-2-25 13:44
你咋老瞅着这帖子就想着加分呢...每一期的版主都是从黑马预备军中挑选出来的,他们也准备读黑或相关专业. ...

我来都三个月了!你看看那个技术分 每天都是精心回答 不加分怎么进17期,不是我老想着
回复 使用道具 举报

  1. class Instance
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                Instance b=new Instance();
  6.                 b.Triangle(5);
  7.          }
  8.         public void Triangle(int x)   
  9.         {
  10.                 for(int n=-4;n<x;n++)
  11.                 {
  12.                         int f=4-Math.abs(n);
  13.                         for(int m=0;m<f;m++)
  14.                                 System.out.print(' ');
  15.                         for(int t=0;t<x-f;t++)
  16.                                 System.out.print("* ");
  17.                        System.out.println();
  18.                 }
  19.         }
  20.       
  21. }
复制代码
自己看吧,希望能帮到你
回复 使用道具 举报
张宁 发表于 2013-2-25 14:24
自己看吧,希望能帮到你

晕死,上面美女的回答我早都看过了...这个绝对值的用法真强.给力!
回复 使用道具 举报
偏執旳、靑春 发表于 2013-2-25 14:12
我来都三个月了!你看看那个技术分 每天都是精心回答 不加分怎么进17期,不是我老想着 ...

帅哥,你发表的主题太少了.你看你,才发表了三个主题,你虽然来的时间久,但是所学知识有限,回答得精心,不一定能解决问题,解决问题了,不一定是第一个,就算是第一个,你还得保证这帖子没沉,版主能看到.你看这条件太苛克了.但是做任何事都是有方法的.我们可以多发表自己的观点,多写自己的程序,让别人来回答我的,让版主看到第一眼,我的贴子比较好.而且回答问题这个东西呢,我们怎么也比不过百度.其实很多问题在百度上答案很多,为什么要在论坛上问呢?活跃气氛,寻找一起讨论的人嘛.而且,我回答就不怎么管有没有加分了.广撒网,总能被加分的.我不相信我知识多,别人一提问,我就回答,别人有分,我没有.不可能的事嘛.
回复 使用道具 举报
陈圳 发表于 2013-2-25 14:33
晕死,上面美女的回答我早都看过了...这个绝对值的用法真强.给力!

恩恩,,,
回复 使用道具 举报
本帖最后由 刘渝灵 于 2013-2-25 14:59 编辑
  1. public static void main(String[] args) throws IOException {
  2.                 int n = 6;
  3.                 method(n);

  4.         }
  5.         public static void method(int n){
  6.                 for(int i=0;i<n;i++){
  7.                         method2(i,n-i);
  8.                         System.out.println();
  9.                 }
  10.                 for(int i=0;i<n;i++){
  11.                         method2(n-i-1,i+1);
  12.                         System.out.println();
  13.                 }
  14.         }
  15.         /**
  16.          * @param x 每行打印“ ”的个数
  17.          * @param y 每行打印“* ”的个数
  18.          */
  19.         public static void method2(int x,int y){
  20.                 for(;x>0;x--){
  21.                         System.out.print(" ");
  22.                 }
  23.                 for(;y>0;y--){
  24.                         System.out.print("* ");
  25.                 }
  26.         }
复制代码
好吧,我承认,楼上的更简洁
回复 使用道具 举报
陈圳 发表于 2013-2-25 14:39
帅哥,你发表的主题太少了.你看你,才发表了三个主题,你虽然来的时间久,但是所学知识有限,回答得精心,不一 ...

哥们 你赢了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马