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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 遮天 中级黑马   /  2014-5-27 10:49  /  1029 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 遮天 于 2014-5-28 10:03 编辑

打印菱形的这段代码怎么优化一下啊?最好是基于java基础知识给优化一下.................
  1. /*

  2.         打印菱形

  3.         菱形可拆分为四个三角形来实现,上半部分可看作是一个倒三角形和一个正三角形,
  4.         下半部分可看作是一个正三角形和一个倒三角形。
  5. */


  6. class Demo
  7. {
  8.         public static void main(String[] args)
  9.         {
  10.                 diamond();
  11.         }

  12.         //打印菱形方法
  13.         public static void diamond()
  14.         {
  15.                 for(int x=0; x<5; x++)
  16.                 {
  17.                         //上半部分倒三角打印
  18.                         for(int y=x; y<5-1; y++)
  19.                         {
  20.                                 System.out.print(" ");
  21.                         }
  22.                         
  23.                         //上半部分正三角打印
  24.                         for(int z=0; z<=x; z++)
  25.                         {
  26.                                 System.out.print("* ");
  27.                         }
  28.                         System.out.println();
  29.                 }

  30.                 for(int x=0; x<4; x++)
  31.                 {
  32.                         //下半部分正三角打印
  33.                         for(int y=0; y<=x; y++)
  34.                         {
  35.                                 System.out.print(" ");
  36.                         }
  37.                         
  38.                         //下半部分倒三角打印
  39.                         for(int z=x; z<4; z++)
  40.                         {
  41.                                 System.out.print("* ");
  42.                         }
  43.                         System.out.println();
  44.                 }
  45.         }
  46. }
复制代码

2 个回复

倒序浏览
本帖最后由 e10my 于 2014-5-27 15:53 编辑

@author e10my

这道题我用部分数学算法代替了其中一个for循环。关于效率还望各位测试。

代码可能比较麻烦,思路是这样的
根据菱形行坐标X以及纵坐标Z 来计算出符合打印出菱形的条件。

使用if控制条件,如果满足这样的条件,则打印出* 否则打印出“ ”

控制条件各位可以自己思考。

  1. /*

  2.         打印菱形

  3.         菱形可拆分为四个三角形来实现,上半部分可看作是一个倒三角形和一个正三角形,
  4.         下半部分可看作是一个正三角形和一个倒三角形。
  5. */


  6. class Demo
  7. {
  8.                 public static final int UP=8; //上棱行数
  9.                 public static final int D = UP%2;

  10.         public static void main(String[] args)
  11.         {
  12.                 diamond();
  13.         }

  14.         //打印菱形方法
  15.         public static void diamond()
  16.         {
  17.                                 int E = 0;
  18.                                 if(D == 0)
  19.                                         E = 1;
  20.                 for(int x=1; x<=UP; x++)
  21.                 {

  22.                         
  23.                         //上半部分正三角打印
  24.                         for(int z=1; z<=(2*UP); z++)
  25.                         {
  26.                                                                 if((z-x)<=UP && (z+x)>=UP && (z+x-UP-1)%2 == E)
  27.                                         System.out.print("*");
  28.                                                                 else
  29.                                                                         System.out.print(" ");
  30.                         }
  31.                         System.out.println();
  32.                 }

  33.                 for(int x=1; x<=UP-1; x++)
  34.                 {

  35.                         //下半部分倒三角打印
  36.                         for(int z=1; z<=(2*UP); z++)
  37.                         {
  38.                                                         if((z-x)%2 == D && (z+x)<=2*UP && (z-x)>0)
  39.                                 System.out.print("*");
  40.                                                         else
  41.                                                                 System.out.print(" ");                        }
  42.                         System.out.println();
  43.                 }
  44.         }
  45. }
复制代码

updata:非常抱歉,我的代码比毕老师的代码要慢了一倍。如图所示。我自己已经无能为力了,待我上google搜罗搜罗其他代码比较。





未命名.JPG (86.96 KB, 下载次数: 4)

未命名.JPG
回复 使用道具 举报
e10my 发表于 2014-5-27 15:36
@author e10my

这道题我用部分数学算法代替了其中一个for循环。关于效率还望各位测试。

谢了,参考一下...........
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马