我们用*号来填充菱形
首先,要想打印出菱形,我们先要对菱形有点认知,首先,菱形是四边相等的图形,只要四边相等,就是菱形,我们这里只说明竖着打印实心菱形和空心菱形。
实心菱形:
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,结果为:
*
* *
* *
* *
* *
* *
* *
* *
* *
* *
*