13,javase程式碼實戰-迴圈控制——for迴圈輸出空心的菱形(四)

程式設計侯發表於2018-02-26

問題介紹:
在控制檯列印一個空心的菱形,輸入引數為菱形的邊長。
這是公司面試和考試題目,目的是為了靈活使用for迴圈兩層巢狀的使用。

問題分析:
這裡寫圖片描述

程式碼實現:

/**
 * 演算法思想:把空心菱形分成兩部分輸出。
 * 上半部分:根據邊長size的大小,輸出size行,每一行先輸出空白格,在輸出後面的*和空白格。
 *  現後順序和輸出的邏輯,根據當前行號和輸出資訊的數學關係式處理。
 * 下半部分:輸出size減1行,每一行也是先輸出空白格,在輸出*和空白格。
 * 
 * 
 * 虛擬碼:
 *  1,size接受使用者的邊長輸入。
 *  2,for迴圈i<=size 執行迴圈體
 *    2.1 for迴圈j=1,j<=size-i 執行迴圈體
 *      2.1.1 輸出空白格
 *    2.2 for迴圈j=1,j<2*i 執行迴圈體
 *      2.2.1 如果 j等於1 或者 j等於2*i-1(每行至多2個*) 。則輸出*
 *      2.2.2 否則輸出中間的空心空白格
 *    2.3 換行
 *    
 *  3,類似2中的處理
 *
 */
        Scanner s =new Scanner(System.in);
        int size =s.nextInt();//邊長
        //上半部分
        for(int i =1;i<=size;i++){//配合 換行操作,控制每一行
            //一行中的 空白輸出
            for(int j =1 ;j<=size-i;j++){
                System.out.print(" ");
            }
            //一行中剩餘的 星號和空白輸出
            for(int j=1;j<2*i;j++){
                if(j==1 || j==2*i-1){
                    System.out.print("*");
                }else {
                    System.out.print(" ");
                }
            }
            //換行
            System.out.println();
        }

        for(int i =1;i<=size-1;i++){
            for(int j=1;j<=i;j++){
                System.out.print(" ");
            }
            for(int j=1;j<=2*(size-i);j++){
                if(j==1 || j==2*(size-i)-1){
                    System.out.print("*");
                }else{
                    System.out.print(" ");
                }
            }
            System.out.println();
        }
    }

總結:
1,如果不加換行操作,那麼就會全部輸出成一行中,根本體現不了菱形,是菱形每一行的順序排列。
2,單純的使用兩層for迴圈時,可以對一大段資料,進行分段式的處理。本例子中,for迴圈被使用到了平面圖形的生成,不僅可以生成菱形,正方形,圓 ,柱形 都可以實現的。所以,我們在分析這些影象時,要從for迴圈的角度(計算機角度)去考慮分析問題。
3,比如說菱形,我們可以畫出一個菱形。怎麼用java程式設計輸出呢?我們可以將其拆分每一行,顯然屬於一個分段式的資料。就可以考慮使用for迴圈來處理。
反過來,我們用for迴圈去處理時,就可以把第一層迴圈看成菱形的行號,第二層的迴圈做菱形的每一行的資訊的輸出。

相關文章