黑马程序员技术交流社区

标题: 关于for嵌套打印*形三角的思维延伸 [打印本页]

作者: 黑色救护车    时间: 2015-3-23 17:22
标题: 关于for嵌套打印*形三角的思维延伸
今天看到了毕老师视频for嵌套的地方了,除了毕老师讲的两种*形三角之外,又拓展了另外四种三角形的打印小程序。毕老师的视频中打印了:
*                               *****
**                              ****
***                             ***
****                            **
*****   和                    *                这两种三角。
第一个拓展是打印:
*****                              *
****                             **
  ***                            ***
   **                           ****
    *    和                   *****             这两种三角:
代码如下:
  1. package test;

  2. /**
  3. * 打印如下图形:
  4. *
  5. *            *****
  6. *            ****
  7. *            ***
  8. *            **
  9. *            *
  10. * @author jeremy
  11. *
  12. * 每一行打印*前,先打印x个空格,即可完成上述图形。
  13. */
  14. public class Triangle3 {

  15.         public static void main(String[] args) {
  16.                 for(int x = 0; x < 5; x ++) {
  17.                        
  18.                         for(int y = x; y < 5; y ++) {
  19.                                
  20.                                 System.out.print("*");
  21.                                
  22.                         }
  23.                        
  24.                         System.out.println();
  25.                        
  26.                         /*
  27.                          * 这个for循环,在每次换行之后,打印x个数量的空格
  28.                          */
  29.                         for(int j = 0; j <= x; j ++) {
  30.                                
  31.                                 System.out.print(" ");
  32.                                
  33.                         }
  34.                 }
  35.         }
  36. }
复制代码
  1. package test;

  2. /**
  3. * 打印如下图形:
  4. *            *
  5. *           **
  6. *          ***
  7. *         ****
  8. *        *****
  9. * @author jeremy
  10. *
  11. *        只需要在Triangle2的基础上,每行先打印x个空格即可打印上述图形。
  12. */
  13. public class Triangle4 {
  14.        
  15.         public static void main(String[] args) {
  16.                
  17.                 for(int x = 0; x < 5; x ++) {
  18.                        
  19.                         /*
  20.                          * 这个循环在每行打印*前,先打印x个空格
  21.                          */
  22.                         for(int j = 4; j > x; j --) {
  23.                                 System.out.print(" ");
  24.                         }
  25.                        
  26.                         for(int y = 0; y <= x; y ++) {
  27.                                 System.out.print("*");
  28.                         }
  29.                        
  30.                         System.out.println();
  31.                 }
  32.         }
  33. }
复制代码
第二个拓展,是打印如下三角和其倒三角:
         *
        ***
       *****
      *******
代码如下:
  1. package test;

  2. /**
  3. * 打印如下图形:
  4. *           
  5. *    *******
  6. *     *****
  7. *      ***
  8. *       *
  9. *
  10. * @author jeremy
  11. *
  12. *        1)根据Triangle3,先将每行前的空格打印出来,第一步结果如下:
  13. *     *******
  14. *      *******
  15. *       *******
  16. *        *******
  17. *
  18. *  2)第二步工作只需要控制每一行的*数量即可,即找出init(初始行*的个数)和x(行数)之间的关系:
  19. *                                                  每一行*的数量 = init - 2x   
  20. *  即x每增加1,每一行的*数量减少2个
  21. *  
  22. *  3)在内循环控制判断条件,即可打印上述图形
  23. */

  24. public class Triangle5 {

  25.         public static void main(String[] args) {
  26.                
  27.                 int init = 17;
  28.                
  29.                 //打印上述图形,初始行*的个数与整个图形行数的关系是 第一行*个数 / 2 + 1,例如第一行*个数(init) = 7的时候,有4行,以此类推
  30.                 for(int x = 0; x < (init / 2 + 1); x ++) {
  31.                        
  32.                         //每一行*的数量 = init - 2x
  33.                         for(int y = 0; y < (init - 2 * x); y ++) {     
  34.                                 System.out.print("*");
  35.                         }
  36.                        
  37.                         System.out.println();
  38.                        
  39.                         //这个循环在换行后先打印x个空格
  40.                         for(int j = 0; j <= x; j ++) {
  41.                                 System.out.print(" ");
  42.                         }
  43.                        
  44.                 }
  45.         }
  46. }
复制代码
  1. package test;

  2. /**
  3. * 打印如下图形:
  4. *
  5. *         *
  6. *        ***
  7. *       *****
  8. *      *******
  9. * @author jeremy
  10. *
  11. *        思路同Triangle5,只是打印空格的循环先于换行语句执行,以及需要根据整个三角的行数确定每行打印空格的个数。
  12. */

  13. public class Triangle6 {
  14.        
  15.         public static void main(String[] args) {
  16.                
  17.                 int base = 15;
  18.                
  19.                 //打印上述图形,初始行*的个数与整个图形行数的关系是 (最后一行*个数 / 2 + 1),例如最后一行*个数(base) = 7的时候,有4行,以此类推
  20.                 for(int x = 0; x < (base / 2 + 1); x ++) {
  21.                        
  22.                         //每行空格的个数 = 最后一行*个数 / 2
  23.                         for(int j = (base / 2); j > x; j --) {
  24.                                 System.out.print(" ");
  25.                         }
  26.                        
  27.                         //第(x + 1)行*的个数 = 最后一行*的个数(base) - 2 * (整个三角形的行数 - (x + 1)),这里貌似很麻烦,但是我想不到更好的方法了,希望大家指点
  28.                         for(int y = 0; y < (base - 2 * ((base / 2 + 1) - (x + 1))); y ++) {
  29.                                 System.out.print("*");
  30.                         }
  31.                        
  32.                         System.out.println();
  33.                 }
  34.         }
  35. }
复制代码
希望对大家有所帮助~一起努力!




作者: bztf    时间: 2015-3-23 21:29
打印一个菱形就差不多了    菱形前天刚刚做出来
作者: 绝望    时间: 2015-3-23 21:41
菱形其实就是综合了这几种的图形,练练那个就足够了




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