天天看點

利用for循環列印實心棱形和空心棱形

一.要求:

    提示使用者輸入棱形的行數,比如輸入5時,列印如下實心棱形和空心棱形(由于排版問題,可能顯示會有變形):

   *

 ***

*****

  *

 * *

*   *

二.分析:

 A.圖形是上下對稱的

 B.每行先列印空格,再列印星号,後面的空格不用列印

 C.中間行不列印空格,其餘行根據與中間的行距,依次增加列印空格的數量

 D.每行列印的星号數量為最大列寬減去此行列印空格數量的兩倍

三.實作:

import java.util.Scanner;

public class loopDemo{

    public static void main(String [] args){

        Scanner sc = new Scanner(System.in);

        System.out.print("請輸入需要列印的棱形行數:");//提示輸入

        int num = sc.nextInt();    //讀取輸入

        int mid = num/2+1;  //計算中間行

        System.out.printf("%d行實心棱形如下:\n",num);   

        for(int i=1;i<=num;i++){

            int x = 0;                //用于記錄每行開始列印的空格數,每行都需要先将列印的空格數x置零,是以不能放到循環外面

            /*   

            if(i <= mid){

                for(int j=1;j<=mid-i;j++) {

                    System.out.printf(" ");

                    x=j;//記錄行首列印的空格數,最後一次指派不會執行,是以x=j,而不是x=j-1

                }

                for(int j=1;j<=num-2*x;j++) {

                    System.out.printf("*");

            }

            if(i > mid) {

                for(int j=1;j<=i-mid;j++){

                    System.out.printf(" ")

                    ;x=j;

                    System.out.printf("*");   

                }   

            //上面的邏輯其實相同,可以采用下面的絕對值來進行簡化

            */

            for(int j=1;j<=Math.abs(mid-i);j++) {

                System.out.printf(" ");//每行先列印空格

                x=j;//并記錄每行行首列印的空格數

            for(int j=1;j<=num-2*x;j++) {//每行*号數量為總的數量減去兩端的空格數量

                System.out.printf("*");//每行列印* 号

            }           

            System.out.println();//每行行尾才列印換行符               

        }

        System.out.printf("%d行空心棱形如下:\n",num);

            int x=0;

                if(j == 1 || j == num-2*x) System.out.printf("*");//每行列印* 号

                else System.out.printf(" ");

            System.out.println();//每行行尾才列印換行符           

        }           

    }

}

本文轉自 碧雲天 51CTO部落格,原文連結:http://blog.51cto.com/333234/1775991,如需轉載請自行聯系原作者

繼續閱讀