Java打印实心菱形,空心菱形

我们用*号来填充菱形

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

实心菱形:

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();
    }
}

我们调用此方法,传入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,结果为:

     *
    * *
   *   *
  *     *
 *       *
*         *
 *       *
  *     *
   *   *
    * *
     *




猜你喜欢

转载自blog.csdn.net/qq_36186690/article/details/81054974
今日推荐