由于我已经知道我需要的菱形是什么样,所以我的思路是把菱形分为上下两部分先打印上半部分,再打印下半部分;
实心菱形:
第一个for循环限定菱形的行数,第二个for循环限定打印空格,第三个for循环打印*,
下半部分行数减1,行数依次递减输出即可。
空心菱形:
只需要打印边界的*,所以在实心菱形基础上用if-else 语句判断是否为边界,是则打印*否则打印空格输出即可。
这样说有些抽象,看以下代码注释即可理解:
package Java2;
/**
* @description:
* @Author: my.yang
* @Date: 2022/10/29 20:31
*/
public class Test6 {
/**
* 行号i(已知) 空白j(未知) *数z(未知)
* * 1 3 1
* *** 2 2 3
* ***** 3 1 5
* ******* 4 0 7
* 上半部分 空白=行数-行号 *数=2*行号-1
* *****
* ***
* *
*/
public static void main(String[] args) {
System.out.println("---实心菱形---");
//上半部分
//外层for循环 i是行号
for (int i = 1; i <= 4; i++) {
//打印空格
for (int j = 1; j <= 4 - i; j++) {
System.out.print(" ");
}
//打印*
for (int z = 1; z <= 2 * i - 1; z++) {
System.out.print("*");
}
//换行
System.out.println();
}
//下半部分
//外层for循环 i是行号
for (int i =3; i >= 1; i--) {
//打印空格
for (int j = 1; j <= 4 - i; j++) {
System.out.print(" ");
}
//打印*
for (int z = 1; z <= 2 * i - 1; z++) {
System.out.print("*");
}
//换行
System.out.println();
}
System.out.println("---空心菱形---");
//上半部分
//外层for循环 i是行号
for (int i = 1; i <= 4; i++) {
//打印空格
for (int j = 1; j <= 4 - i; j++) {
System.out.print(" ");
}
// 边界打印* 其他打印空格即可
for (int z = 1; z <= (2 * i - 1); z++) {
//两边的1与最大值为边界打印*
if (z==1||z==2*i-1){
System.out.print("*");
}
//不是边界打印空格
else {
System.out.print(" ");
}
}
//换行
System.out.println();
}
//下半部分
//外层for循环 i是行号
for (int i =3; i >= 1; i--) {
//打印空格
for (int j = 1; j <= 4 - i; j++) {
System.out.print(" ");
}
//打印*
for (int z = 1; z <= 2 * i - 1; z++) {
//两边的1与最大值为边界打印*
if (z==1||z==2*i-1){
System.out.print("*");
}
//不是边界打印空格
else {
System.out.print(" ");
}
}
//换行
System.out.println();
}
}
}
一起看看结果吧:
注:新手小白,有不妥请温柔指正,拴扣!