用迴圈畫各種圖形,去認自己清楚多層迴圈的邏輯

1.畫出等腰三角形,三角形的高度為7

思考步驟如下:

image

當轉換成程式碼的時候是這樣,程式的順序是先印出空格,再印星星

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();
        }
    }
}

image

還有兩種方式,雖然看得懂,但我覺得都好複雜><

第一個是:

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();
        }
    }
}

image

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();
        }
    }
}

image

更快速的解法:

要考驗數字換算的能力

數列關係

image

 

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

image