程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Java小例子:打印一個金字塔

Java小例子:打印一個金字塔

編輯:關於JAVA

這是最基礎的例子了,每個初學者都會要做這個題目。這個題目的目的是熟悉循環特 別是嵌套循環的使用。但是如果對 Java 足夠熟悉,回頭來再寫這個程序,就完全不是這 麼寫的了。

嵌套循環是非常復雜的邏輯。特別是寫得很長的嵌套循環,一個不小心把 j 寫成 i, 就夠你調試半天的。所以嵌套循環應該盡量避免。怎麼避免?將內部循環提取成一個方法 。這樣每個方法裡都只有一層循環,容易看,容易改,而且不容易出錯。

import java.util.Arrays;

/**

 * 打印一個字符組成的金字塔

 */

public class Pyramid {

    // 程序入口

    public static void main(String[] args) {

        printPyramid(21, '*');

    }

    /**

     * 打印一座金字塔。

     *

     * @param bottom_width 底層寬度。必須是奇數。

     * @param ch           組成金字塔的字符

     */

    private static void printPyramid(int bottom_width, char ch)  {

        if (bottom_width < 1 || bottom_width % 2 == 0)  {

            throw new IllegalArgumentException();

        }

        int height = bottom_width / 2 + 1;  // 金字塔的高度

        for (int i = 0; i < height; i++) {

            int width = i * 2 + 1;    // 本層的寬度

            System.out.println(getLevel(bottom_width, width,  ch));

        }

    }

    /**

     * 生成金字塔的一行

     *

     * @param bottom_width 金字塔寬度

     * @param width        本層的寬度

     * @param ch           要打印的字符

     *

     * @return 金字塔的一行

     */

    private static String getLevel(int bottom_width, int width,  char ch) {

        int space_width = (bottom_width - width) / 2;   //  前面空格的寬度

        return expand(' ', space_width) + expand(ch, width);

    }

    /**

     * 生成包含若干個字符的字符串。

     *

     * @param c     生成字符串的字符

     * @param width 字符串的長度

     *

     * @return 生成的字符串

     */

    private static String expand(char c, int width) {

        char[] chars = new char[width];

        Arrays.fill(chars, c);

        return new String(chars);

    }

}

看完你可能覺得奇怪:這裡有嵌套嗎? 有。Arrays.fill() 方法最終就是通過循環實 現的。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved