public static void main(String[] args) {
/*
內層迴圈每次執行10次
第1行(i=5) 印星號 j=5
第2行(i=4) 印星號 j=4、6
第3行(i=3) 印星號 j=3、5、7
第4行(i=2) 印星號 j=2、4、6、8
第5行(i=1) 印星號 j=1、3、5、7、9
j其餘情況印一個空白
輸出上半部:
*
* *
* * *
* * * *
* * * * *
*/
for (int i = 5; i > 0; i--) {
// 計算當前是第幾行,第0行即不用找下一個印星號的位置
int line = 5 - i;
int nextPosition = 0;
for (int j = 1; j < 10; j++) {
// 當 內層迴圈 第一次 i == j 的時候,就先去找下一個印*號的位置
// j == nextPosition(下一個印星號的位置),就印星號
if (line >= 0 && (j == i || nextPosition == j)) {
System.out.print("*");
if (line > 0) {
// 當印出當前星號後,就開始找到再下個印星號的位置
nextPosition = j + 2;
// 當line=0,代表當前這行的星號已經印完了
line--;
}
} else {
// 印空白
System.out.print(" ");
}
}
// 換行
System.out.println();
}
/*
內層迴圈每次執行7次
第1行(i=5) 印星號 j=8、6、4、2
第2行(i=4) 印星號 j=7、5、3
第3行(i=3) 印星號 j=6、4
第4行(i=2) 印星號 j=5
j其餘情況印一個空白
輸出下半部:
* * * *
* * *
* *
*
*/
for (int i = 5; i > 1; i--) {
// 每行開頭先印一個空白
System.out.print(" ");
// 計算當前是第幾行,第0行即不用找下一個印星號的位置
int line = i - 2;
int nextPosition = 0;
for (int j = 8; j > 1; j--) {
// 當 內層迴圈 第一次(i+3) == j 的時候,就先去找下一個印*號的位置
// j == nextPosition(下一個印星號的位置),就印星號
if (line >= 0 && (j == (i+3) || nextPosition == j)) {
System.out.print("*");
if (line > 0) {
// 當印出當前星號後,就開始找到再下個印星號的位置
nextPosition = j - 2;
// 當line=0,代表當前這行的星號已經印完了
line--;
}
} else {
// 印空白
System.out.print(" ");
}
}
// 換行
System.out.println();
}
}
輸出結果:
*
* *
* * *
* * * *
* * * * *
* * * *
* * *
* *
*