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