第一篇:打印空心菱形
import java.util.Scanner;
public class LianXi_01 {
//给定任意层数,打印空心菱形金字塔
/*分析:
若菱形有7层
*
* *
* *
* *
* *
* *
*
则最中间层数上面的每一层需要输出(总行数-当前行数-1)个空格【再-1是为了预防菱形层数为3时代码也能准确输出菱形】
最中间层数上面的每一层需要输出(当前行数*2-1)个*
最中间层数下面的每一层需要输出(当前行数-1-1)个空格【再-1是为了预防菱形层数为3时代码也能准确输出菱形】
第五层需要输出(当前行数-2*1)*2-1个*
第六层需要输出(当前行数-2*2)*2-1个*
第七层需要输出(当前行数-2*3)*2-1个*(只需输出1个*,写出来是为了方便找规律)
所以可以看出需要一个计数器count辅助输出菱形下半部分的代码
而空心菱形只需要输出每一层的第一个*和最后一个*(即当前行数*2-1),其余该输出的*换为输出空格
*/
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int cnt = 0;//计数器
for(int i = 1; i <= n; i++){//i表示层数
if(i > n/2+1){
cnt++;
}
//输出上半部分
if(i <= n/2+1){
//最前面的输出空格
for(int j = 1; j <= n-i-1; j++){
System.out.print(" ");
}
//输出每一行
for(int k = 1; k <= 2*i-1; k++){
if(k == 1 || k == 2*i-1){
System.out.print("*");
}else {
System.out.print(" ");
}
}
//输出下半部分
}else {
//输出最前面空格
for(int a = 1; a <= i-1-1; a++){
System.out.print(" ");
}
//输出每一层
for(int b = 1; b <= (i-2*cnt)*2-1; b++){
if(b == 1 || b == (i-2*cnt)*2-1){
System.out.print("*");
}else {
System.out.print(" ");
}
}
}
//每输出完一层就换行
System.out.println();
}
}
}