思路分析:
先打印一个实心菱形:共9层上方是5层的三角形,下方为4层的倒三角形
上半部分 5层:
打印每行 * 最前方对应的空格(层数 - i) 个
打印每行的 *:(2 * i - 1)个
* //第 1 层 有 1 个* 2 * 1 - 1 有 4=(层数-1)个空格
*** //第 2 层 有 3 个* 2 * 2 - 1 有 3=(层数-2)个空格
***** //第 3 层 有 5 个* 2 * 3 - 1 有 2=(层数-3)个空格
******* //第 4 层 有 7 个* 2 * 4 - 1 有 1=(层数-4)个空格
********* //第 5 层 有 9 个* 2 * 5 - 1 有 0=(层数-5)个空格
下半部分 4层:
打印每行 * 前对应的空格 i 个
打印每行的 *:2 * (4 - i) + 1个
******* //第 1 层 有 7 个* 2 *(4 - 1) + 1 有 1=(层数)个空格
***** //第 2 层 有 5 个* 2 *(4 - 2) + 1 有 2=(层数)个空格
*** //第 3 层 有 3 个* 2 *(4 - 3) + 1 有 3=(层数)个空格
* //第 4 层 有 1 个* 2 *(4 - 4) + 1 有 4=(层数)个空格
打印空心的金字塔
将每一行除了第一个位置和最后一个位置是 * 外,其他都输出为空格
* //第 1 层 有 1 个* 当前行的第一个位置是*,最后一个位置也是*
* * //第 2 层 有 2 个* 当前行的第一个位置是*,最后一个位置也是*
* * //第 3 层 有 2 个* 当前行的第一个位置是*,最后一个位置也是*
* * //第 4 层 有 2 个* 当前行的第一个位置是*,最后一个位置也是*
* * //第 5 层 有 2 个* 当前行的第一个位置是*,最后一个位置也是*
当前行的第一个位置是*,最后一个位置( j == 1 && j == 2 *(4 - i) + 1 )也是*
* * //第 1 层 有 2 个* 当前行的第一个位置是*,最后一个位置也是*
* * //第 2 层 有 2 个* 当前行的第一个位置是*,最后一个位置也是*
* * //第 3 层 有 2 个* 当前行的第一个位置是*,最后一个位置也是*
* //第 4 层 有 1 个* 当前行的第一个位置是*,最后一个位置也是*
代码:
public class Lingxing{
public static void main(String[] args){
//菱形上半部分(前5行)
for(int i = 1; i <= 5; i++){ //i 控制层数
for(int j = 1; j <= 5 - i; j++){ // j 表示* 前每行空格数
System.out.print(" ");
}
for(int k = 1; k <= 2 * i - 1; k++){ //k 表示每行 * 的个数
if(k == 1 || k == 2 * i - 1){ //当前行的第一个位置是*,最后一个位置也是*
System.out.print("*");
}else{ //当前行其它位置为空格
System.out.print(" ");
}
}
//每打印完一层的式子后,换行 println 本身就会换行
System.out.println(" ");
}
//菱形下半部分(后4行)
for(int i = 1; i <= 4; i++){ //i 控制层数
for(int j = 1; j <= i; j++){ // j 表示 * 前每行空格数
System.out.print(" ");
}
for(int k = 1; k <= 2 *(4 - i) + 1; k++){ //k 表示每行 * 的个数
if(k == 1 || k == 2 *(4 - i) + 1){ //当前行的第一个位置是*,最后一个位置也是*
System.out.print("*");
}else{ //当前行其它位置为空格
System.out.print(" ");
}
}
//每打印完一层的式子后,换行 println 本身就会换行
System.out.println(" ");
}
}
}
运行结果: