用迴圈畫各種圖形,去認自己清楚多層迴圈的邏輯
1.畫出等腰三角形,三角形的高度為7
思考步驟如下:

當轉換成程式碼的時候是這樣,程式的順序是先印出空格,再印星星
public class MainClass { public static void main(String[] args) { for(int i = 0; i<7; i++){ //為什麼要用迴圈,因為要印出"迴圈次"個*或空格 for(int x =0; x<(6-i); x++){ //印出倒三角空格 System.out.print(" "); } for(int n = 0; n<(2*i+1); n++){ //印出三角形 System.out.print("*"); } System.out.println(); } } }
2.將等腰三角形的高,改為使用者輸入=>將i改為設定的使用者變數
import java.util.Scanner; public class MainClass { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.print("請輸入三角形的高:"); int userHeight = sc.nextInt(); for(int i = 0; i<userHeight; i++){ for(int x =0; x<((userHeight-1)-i); x++){ System.out.print(" "); } for(int n = 0; n<(2*i+1); n++){ System.out.print("*"); } System.out.println(); } } }
3.繪製空心平行四邊形
public class MainClass { public static void main(String[] args) { for(int i = 0; i<5; i++){ for(int t = 0; t<4-i; t++){ //印出倒三角空格 System.out.print(" "); } if(i==0||i==4){ //印出第一和最後一列 System.out.print("*****"); }else{ //印出中間 System.out.print("* *"); } System.out.println(); } } }

還有兩種方式,雖然看得懂,但我覺得都好複雜><
第一個是:
public class MainClass { public static void main(String[] args) { for(int i = 0; i<5; i++){ for(int t = 0; t<4-i; t++) { //印出倒三角空格 System.out.print(" "); } if(i==0||i==4) { //印出第一和最後一列 for (int k = 0; k < 5; k++) { System.out.print("*"); } }else{ //印出中間 System.out.print("*"); //印出* *的第一個* for (int k = 0; k < 3; k++) { System.out.print(" "); //印出* *的空格 } System.out.print("*"); //印出* *的最後一個* } System.out.println(); } } }
public class MainClass { public static void main(String[] args) { for(int i = 0; i<5; i++){ for(int t = 0; t<4-i; t++) { //印出倒三角空格 System.out.print(" "); } if(i==0||i==4) { //印出第一和最後一列 for (int k = 0; k < 5; k++) { System.out.print("*"); } }else{ for (int k = 0; k < 5; k++) { if(k==0||k==4){ //印出第一個和最後一個* System.out.print("*"); }else{ //印出第二~第四個* System.out.print(" "); } } } System.out.println(); } } }
4.繪製空心等腰三角形
public class MainClass { //為什麼要用迴圈,因為要印出"迴圈次"個*或空格 public static void main(String[] args) { for (int i = 0; i < 6; i++) { //跑6層 for (int m = 0; m < 5 - i; m++) { //印出倒三角空格 System.out.print(" "); } if (i >= 1 && i <= 4) { //三角形中間的空格和* System.out.print("*"); for (int space = 0; space < (2 * i - 1); space++) { System.out.print(" "); } System.out.print("*"); } else if (i == 0) { //三角形第一列 System.out.print("*"); } else { //三角形最後一列 for (int k = 0; k < (6 * 2 - 1); k++) { System.out.print("*"); } } System.out.println(); } } }

5.繪製菱形
public class MainClass { //為什麼要用迴圈,因為要印出"迴圈次"個*或空格 public static void main(String[] args) { for(int up = 0; up<5/2+1; up++){ //先印上面的三角形 for(int j = 0; j<2-up; j++){ //印上面的倒三角形空格 System.out.print(" "); } for(int tri = 0; tri<2*up+1; tri++){ System.out.print("*"); } System.out.println(); } for(int down = 0; down<5/2; down++){ //再印下面的三角形 for(int j = 0; j<down+1; j++){ //印下面的倒三角形空格 System.out.print(" "); } for(int tri = 0; tri<5-2*down-2; tri++){ //那個5-2*down-2的推理... System.out.print("*"); } System.out.println(); } } }

更快速的解法:
要考驗數字換算的能力
數列關係

Math.abs() 是絕對值
public class MainClass { public static void main(String[] args) { for(int h = 0; h<5; h++){ for(int s =0; s<Math.abs(h-2); s++){ System.out.print("-"); } for(int star =0; star<5-2*Math.abs(h-2); star++){ System.out.print("*"); } System.out.println(); } } }
最後最後,把這個菱形的高度變成使用者輸入:
原本Math.abs(h-2)的地方會用Math.abs(h-(input/2))替代,推理過程如下圖
import java.util.Scanner; public class MainClass { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.print("請輸入菱形高度:"); int input = sc.nextInt(); for(int h = 0; h<input; h++){ for(int s =0; s<Math.abs(h-(input/2)); s++){ System.out.print("-"); } for(int star =0; star<input-2*Math.abs(h-(input/2)); star++){ System.out.print("*"); } System.out.println(); } } }
因為空格和星星的數量,都是高度的一半時反轉的,所以是input/2

