此时我们以打印9行的实心菱形为例, 将菱形一分为二: 前5行 + 后4行
//这里先打印前5行菱形
for(int i=0;i<5;i++) { //i从0到5
for(int j=i+1;j<5;j++) { //空格从4到0
System.out.print(" ");
} //01234 i的变化
for(int j=0;j<2*i+1;j++) { //*从1到9 //43210 空格数量的变化
System.out.print("*"); //13579 *数量的变化
}
System.out.println();
}
//下面为打印后4行菱形
for(int i=3;i>=0;i--) { //3210 i的变化
for(int j=i+1;j<5;j++) {//空格从1到4 //1234 空格数量的变化
System.out.print(" "); //7531 *数量的变化
}
for(int j=0;j<2*i+1;j++) {//*从7到1
System.out.print("*");
}
System.out.println();
}
要根据空格数量的变化和 * 数量的变化推 i 的变化范围
改进后的代码如下:
import java.util.Scanner;
public class Demo {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
System.out.println("请输入要打印几行的实心菱形(奇数个):");
int n=sc.nextInt();
if(n%2==0) {
System.out.println("您输入的n不是奇数");
}
else {
int a=n/2+1; // 前半部分为a行
int b=n/2; // 后半部分为b行
for(int i=0;i<a;i++) { // 前a行, 每一行打印空格和 * , 然后下一行
for(int j=i+1;j<a;j++) {
System.out.print(" ");
}
for(int j=0;j<2*i+1;j++) {
System.out.print("*");
}
System.out.println();
}
for(int i=b-1;i>=0;i--) { // 后b行, 每一行打印空格和 * , 然后下一行
for(int j=i+1;j<a;j++) {
System.out.print(" ");
}
for(int j=0;j<2*i+1;j++) {
System.out.print("*");
}
System.out.println();
}
}
}
}