菱形可拆看成一个正三角形跟一个倒三角行组成,因此可分两步来走
1、先打印正三角形
先用for循环来整个遍历,再打印倒直角三角形空白字符来占据空间,使我们所需的三角形变成一个正三角形
//打印上半层
for(int i = 1; i <= totalLevel-1; i++) {
for(int k = 1; k <= totalLevel - i; k++) {
System.out.print(" ");
}
for(int j = 1; j <= (2*i-1); j++) { //减去一层,使上半层比下半层少一层
if(j == 1 || j == 2*i-1) { //当前行的第一个位置,跟最后一个位置打印*
System.out.print("*");
}
else { //否则打印空格
System.out.print(" ");
}
}
System.out.println(); //换行
}
2、打印倒三角形
原理和正三角形差不多,区别在于每层的打印数跟正三角形的刚好反过来,所以循环条件需要自己理清楚。
//打印下半层
for(int i = 1; i <= totalLevel; i++) { //遍历
for(int k = 1; k <= i-1; k++) { //打印空格来塑形
System.out.print(" ");
}
for(int j = 1; j <= 2*totalLevel-a; j++) { //每层遍历次数
if(j == 1 || j == 2*totalLevel-a) { //当前行的第一个位置,跟最后一个位置,最后一行打印*
System.out.print("*");
}
else { //否则打印空格
System.out.print(" ");
}
}
a+=2;
System.out.println();
}
3、最后再键盘输入层数,当然因为菱形是奇数层的,所以层数的奇偶有所要求,这里加个判断,筛选出偶数才予以通过,然后让上半层少一层,循环条件里减1即可,让菱形中的中间层给到下半层画出来。整体代码如下:
//打印菱形
private static void printfLing() {
Scanner scan = new Scanner(System.in);
System.out.println("请输入偶数层数:");
int totalLevel = scan.nextInt(); //层数
int a = 1;
if(totalLevel < 0 || totalLevel % 2 != 0) { //判断输入层数为偶数且不为负数
System.out.println("输入层数不符合要求!");
return;
}
System.out.println("输出结果如下:");
//打印上半层
for(int i = 1; i <= totalLevel-1; i++) {
for(int k = 1; k <= totalLevel - i; k++) {
System.out.print(" ");
}
for(int j = 1; j <= (2*i-1); j++) { //减去一层,使上半层比下半层少一层
if(j == 1 || j == 2*i-1) { //当前行的第一个位置,跟最后一个位置打印*
System.out.print("*");
}
else { //否则打印空格
System.out.print(" ");
}
}
System.out.println(); //换行
}
//打印下半层
for(int i = 1; i <= totalLevel; i++) { //遍历
for(int k = 1; k <= i-1; k++) { //打印空格来塑形
System.out.print(" ");
}
for(int j = 1; j <= 2*totalLevel-a; j++) { //每层遍历次数
if(j == 1 || j == 2*totalLevel-a) { //当前行的第一个位置,跟最后一个位置,最后一行打印*
System.out.print("*");
}
else { //否则打印空格
System.out.print(" ");
}
}
a+=2;
System.out.println();
}
}
结果如下:



