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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

我们用*号来填充菱形

首先,要想打印出菱形,我们先要对菱形有点认知,首先,菱形是四边相等的图形,只要四边相等,就是菱形,我们这里只说明竖着打印实心菱形和空心菱形。

实心菱形:

[java] view plain copy



  • <code class="language-java"><span style="font-size:14px;">public static void printHollowRhombus(int size) {  
  •          
  •     //首先,菱形的行数不能为偶数,因为偶数行不能 构成菱形  
  •     if(size % 2 == 0) {  
  •         System.out.println("菱形行数必须为奇数!");  
  •     return;  
  •     }         
  •     //为了区分,我们把i当成当前正在打印的行数  
  •     //我们来找一下行数和需要打印*号数量和开头空格的数量的规律  
  •     //假如当前为11行,我们先来分析上半部分:  
  •          
  • //     行数          *号数量     空格数量         打印图形  
  • //  1       1       5              *  
  • //  2       3       4             ***  
  • //  3       5       3        *****  
  • //  4       7       2       *******  
  • //  5       9       1      *********  
  • //  6       11              0     ***********         
  •     //由此我们可得  
  •     //*号数量  = 2*(行数-1) + 1  
  •     //空格数量  = (总行数+1)/2 - 行数  
  •          
  •     //此处i代表的是第几行。  
  •     for(int i = 1 ; i <= (size+1)/2 ; i++) {  
  •     //打印空格,j相当于空格的数量  
  •     for(int j = size/2; j >= i; j--) {  
  •         System.out.print(" ");  
  •     }  
  •     //打印*号,j相当于*号的数量  
  •     for(int j = 0 ; j < 2*(i-1)+1 ; j++) {  
  •         System.out.print("*");  
  •     }  
  •         //打印完成换行  
  •     System.out.println();  
  •     }  
  •          
  •          
  •     //我们来找一下行数和需要打印*号数量和开头空格的数量的规律  
  •     //假如当前为11行,我们来分析下半部分:  
  •                   
  • //  行数          *号数量        空格数量        打印图形  
  • //   7      9       1      *********  
  • //   8      7       2           *******  
  • //   9      5       3        *****  
  • //   10     3       4         ***  
  • //   11     1       5          *  
  •          
  •     //由此我们可得  
  •     //*号数量  = 2*总行数+1-2*行数  
  •     //空格数量  = 行数 - 6  
  •     //记录一下中间行数  当前为第6行。  
  •     int x2 = (size+1)/2+1;  
  •     //此处i代表的是第几行。  
  •     for(int i = x2 ; i <= size ; i++) {  
  •         //打印空格,j相当于空格的数量  
  •     for(int j=0 ; j < i- (x2 - 1); j++) {  
  •         System.out.print(" ");  
  •     }  
  •     //打印*号,j相当于*号的数量  
  •     for(int j = 0 ;j<2*size+1-2*i;j++) {     
  •         System.out.print("*");  
  •     }  
  •     //打印换行  
  •     System.out.println();  
  •     }  
  • }</span></code>  


我们调用此方法,传入11,结果如下:



  •      *



  •     ***



  •    *****



  •   *******



  • *********



  • ***********



  • *********



  •   *******



  •    *****



  •     ***



  •      *


空心菱形,道理上面都讲过了,原理上是一样的,只是在打印的*的时候我们只需要在第一个和最后一个打印*,其余的打印空格,代码如下,请参考:



  • public static void printSolidRhombus(int size) {







  •         if(size % 2 == 0) {



  •                 System.out.println("菱形行数必须为奇数!");



  •                 return;



  •         }               



  •         for(int i = 1 ; i <= (size+1)/2 ; i++) {



  •                 for(int j = size/2; j >= i; j--) {



  •                         System.out.print(" ");



  •                 }



  •                 for(int j = 0 ; j < 2*(i-1)+1 ; j++) {                               



  •                         if(j ==0 || j == 2*(i-1)) {



  •                                 System.out.print("*");



  •                         }else {



  •                                 System.out.print(" ");



  •                         }



  •                 }



  •                 System.out.println();



  •         }



  •         int x2 = (size+1)/2+1;



  •         for(int i = x2 ; i <= size ; i++) {



  •                 for(int j=0 ; j < i- (x2 - 1); j++) {



  •                         System.out.print(" ");



  •                 }



  •                 for(int j = 0 ;j<2*size+1-2*i;j++) {                                                



  •                         if(j ==0 || j == 2*size-2*i) {



  •                                 System.out.print("*");



  •                         }else {



  •                                 System.out.print(" ");



  •                         }                       



  •                 }



  •                 System.out.println();



  •         }



  • }


同样为他输出11,结果为:



  •      *



  •     * *



  •    *   *



  •   *     *



  • *       *



  • *         *



  • *       *



  •   *     *



  •    *   *



  •     * *



  •      *



【转载】原文地址:https://blog.csdn.net/qq_36186690/article/details/81054974


3 个回复

正序浏览
回复 使用道具 举报
回复 使用道具 举报
奈斯
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马