java SE 用星號打印圖形

今天突然想到了自己對for循環的理解,因爲之前老師講過九九乘法表的打印方法,自己卻還沒真的那麼做過,就想着要做一下,順便就把打印圖形再複習一遍。

首先是打印一個九九乘法表

package demo0124;

/**
 * 一個九九乘法表
 * 
 * @author Feng 2018年1月24日下午12:24:15
 */
public class ChengFaTable {

    public static void main(String[] args) {
        // TODO 自動生成的方法存根
        for (int i = 1; i <= 9; i++) {

            for (int j = 1; j <= i; j++) {
                System.out.print(j + "*" + i + "=" + i * j + "\t");
            }
            System.out.println();
        }
    }

}

結果如圖示:

這裏寫圖片描述

接下來就是圖形的問題了

關於這個,我把幾乎所有的認識都放在了註釋裏邊,覺得那樣容易理解些。

package d;

public class Demo01 {
    public static void main(String[] args) {
        /**
         * 用*  打印出圖形,使用for 循環嵌套來實現。
         * 有直角三角形,等腰三角形,菱形,平行四邊形。
         * 
         * 首先來分析:
         *1、 for 循環嵌套時,有內層循環和外層循環,首先一定得明白,外層執行一次,內層執行一遍。
         *2、程序中打印字符是一行一行打印的。也就是需要在換行的地方多思考
         *3、*****
         *   ****
         *   ***
         *   **
         *   *
         *   這個圖形的形成是怎樣的,我們可以很明顯就能看出來,第一行有5個* ,然後換行,再到第二行,*是少了一個的。
         *   可以把外層看做是  行數,而內層循環是列數,每一行的列數。
         *   這樣就能好理解一些了。因爲第3、4、5行都是逐層遞減的。也就是內層的循環次數是在外層循環每執行一次的時候就減少一次。
         *   我們可以先確定行數,以上邊這個直角三角形爲例,它是外層循環5次,內層循環5次,只是內層每執行一次打印的*就少一個。
         * @author Feng
         * 2018年1月24日下午12:06:36
         */
        //直角三角形方法1
        for (int i = 0; i < 5; i++) {//用 i 來表示行數,外層是循環5次。
            //每打印完一行的*之後,換行並且i+1換到下一行,這裏的j<5-i就表示在i從0到4遞增的同時,j是從5到1的遞減的
            //所以就能出現第一行5個*,第2行4個*,第三行3個*,一直到第5行是1個*,組合起來就剛好是一個直角三角形了。
            for (int j = 0; j < 5-i; j++) {//用j 來表示列數,內層也是5次。
                System.out.print("*");//在第i行打印*,*的個數由j確定。
            }
            System.out.println();//當內層循環完一圈之後,就換行,第一次是5個*就換行。
        }
        //直角三角形方法2
        for (int i = 0; i < 5; i++) {
            for (int j = i; j < 5; j++) {
                System.out.print("*");
            }
            System.out.println();
        }
        //尖朝上的直角三角形
        System.out.println("======================================");
        for (int i = 0; i < 5; i++) {
            for (int j = 0; j <= i; j++) {
                System.out.print("*");

            }
            System.out.println();

        }

        System.out.println("======================================");
        //平行四邊形,由尖朝上的直角三角形,空白的(我這裏用2表示,當輸出是" "的時候就能看出是個矩形,不過斜着來了一刀,也是尖朝下的。)
        //所以平行四邊形是由3部分組成的,3個三角形,一個是空格組成的三角形
        /**
         *  *
         *  **
         *  ***
         *  ****
         *  *****
         *  2****
         *  22***
         *  222**
         *  2222*
         *  22222
         * 
         * 分析一下:平行四邊形,用1個四行四列得到三角形在底下,5行5列的在上邊
         * 這裏的2是打印的空格的地方,其實就是上邊那個尖朝上的三角形了。
         */
        for (int i = 0; i < 5; i++) {
            for (int j = 0; j <= i; j++) {
                System.out.print("*");

            }
            System.out.println();

        }
        for (int i = 0; i < 5; i++) {//同樣是外循環5次
            for (int j = 0; j <= i; j++) {//隨着i的增加,j是從0到4的。
                System.out.print("2");//5行5列的空白。
            }
            for (int j = 0; j < (4 - i); j++) {//隨着i從0到4的增加,j是從0到3的增加。
                System.out.print("*");//4行4列的*。
            }
            System.out.println();

        }
        System.out.println("======================================");
        //倒等腰三角
        /**
         * *******
         *  *****
         *   ***
         *    *
         *    
         * 同樣是先打印個尖向上的空白三角形
         */
        for(int i = 0; i < 4 ; i++){//4行
            for(int j =0 ;j <= i; j++){//4列
                System.out.print("5");//空白區域是4行4列的三角形
            }
            for(int k = 0 ;k < (3-i)*2+1 ;k++){//隨着i的增加,k的變化是  6+1,4+1,2+1,0+1
                //也就是說,第一行除了打印了1個空白之外,還有7個*,第二行是5個*,依次類推。
                System.out.print("*");
            }
            System.out.println();
        }
        System.out.println("======================================");
        //正等腰三角
        for(int i = 0; i < 4 ; i++){

            for(int j =0 ; j < 4-i;j ++ ){
                System.out.print(" ");
            }
            System.out.print("*");
            for(int k = 0 ;k <i*2;k++){
                System.out.print("*");
            }
            System.out.println();
        }
        System.out.println("======================================");
        //菱形的笨蛋方法
        //直接用2個等腰三角形拼起來。
        for(int i = 0; i < 4 ; i++){

            for(int j =0 ; j < 4-i;j ++ ){
                System.out.print(" ");
            }
            for(int k = 0 ;k <i*2+1;k++){
                System.out.print("*");
            }
            System.out.println();
        }
        for(int i = 0; i < 4 ; i++){
            for(int j =0 ;j <= i+1; j++){
                System.out.print(" ");
            }
            for(int k = 0 ;k <(7-2*i) ;k++){//把倒的等腰三角放在正的等腰三角形下邊。
                System.out.print("*");
            }
            System.out.println();
        }
        System.out.println("======================================");
        //可以看到,直接拼是不行的,這樣只能得到一個平行四邊形。還得調整一下條件。
        for(int i = 0; i < 4 ; i++){

            for(int j =0 ; j < 4-i;j ++ ){
                System.out.print(" ");
            }
            for(int k = 0 ;k <i*2+1;k++){
                System.out.print("*");
            }
            System.out.println();
        }
        for(int i = 0; i < 4 ; i++){
            for(int j =0 ;j <= i+1; j++){
                System.out.print(" ");
            }
            for(int k = 0 ;k <(5-2*i) ;k++){//把倒的等腰三角放在正的等腰三角形下邊。
                //這時的k變化是:4,3,1,所以就有下邊那個3行的三角形。
                System.out.print("*");
            }
            System.out.println();
        }
    }

}

對了,差點忘記附上截圖了。
這裏寫圖片描述
這裏寫圖片描述
還有就是

打印輸入行數的等腰三角形和菱形

/**
         * 等腰三角形
         * 輸入行數,然後打印所輸入行數的三角形。
         * 
         * 思考:
         * 8888888
         * 888888*
         * 88888***
         * 8888*****
         * 888*******
         * 88*********
         * 8***********
         * 
         * 這裏的8,到時候就是空白區域
         * 
         * 
         */
        @SuppressWarnings("resource")
        Scanner input = new Scanner(System.in);
        System.out.println("請輸入你所需要打印的三角形的行數:");
        int row1 = input.nextInt();//行數
        for(int i = 0; i < row1+1 ;i++){//外層循環控制行數
            for(int k = row1+1 -i ;k >0 ;k--){//6行就是7行空白,當i等於0的時候,k是行數,而且每次換行之後就把空白個數減去1。
                System.out.print("8");
            }
            for(int j = 1; j <= 2*i-1 ;j++){//當i等於0,j是小於等於
                System.out.print("*");
            }
            System.out.println();
        }
        System.out.println("===============================");
        //打印輸入行數的菱形
        //將打印輸入行數的三角形修改一下。
        System.out.println("請輸入你要打印的菱形的行數:");
        //這裏用的是上半個三角形的行數。
        @SuppressWarnings("unused")
        int row2 = input.nextInt();
        //上邊部分是將打印三角形的代碼拷貝一下。
        //可以看到,菱形如果是兩個三角形兌着的話,就是奇數行。
        /**
         * 8***************
         * 88*************
         * 888***********
         * 8888*********
         * 88888*******
         * 888888*****
         * 8888888***
         * 88888888*
         * 888888888
         * 
         * 還有可能要將這下邊的最上面一行去掉。
         */
        if(row2%2!=0){

            for(int i = 0; i < (row2/2)+1+1 ;i++){//外層循環控制行數
                for(int k = row2/2+2 -i ;k >0 ;k--){
                    System.out.print("8");
                }
                for(int j = 1; j <= 2*i-1 ;j++){
                    System.out.print("*");
                }
                System.out.println();
            }
            for(int i =0;i < row2/2+1;i++){
                for(int k = 0;k <= i+1;k++){//i從0開始,row2是行數,k是打印空白的列數
                    System.out.print("9");
                }
                for (int j = 0; j <= (row2/2+1-i)*2-4 ; j++) {
                    System.out.print("*");
                }
                System.out.println();
            }
        }else{
            System.out.println("菱形行數不能爲偶數!");
            System.out.println("正在退出");
            System.exit(0);
        }

這裏寫圖片描述
行啦,我的磚就拋到這兒了,哪位帥哥靚妹有好的想法可以交流哦~
記得留言哦。
這裏寫圖片描述
這最後的圖是我修改之前的打印菱形,它的缺點是輸入的是菱形上半邊的比較大的那個三角形的行數。並不是菱形的行數,所以試了老半天,最後出現的結果就是把這個行數除以2加上1,這樣算的就是菱形的行數了。基本就是照着倒三角形的模樣修修改改,主要改的就是條件了,其他地方仍然拿來用就行。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章