首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Java星號圖形打印代碼詳解:雙層循環控制行與列

     編輯:程式設計疑難解答

Java圖形打印基礎:星號菱形代碼逐行解析

很多初學者面對打印菱形、三角形的嵌套循環代碼感到無從下手。本文以一個典型的星號菱形打印程序為例,逐行解析變量含義、循環邏輯、條件判斷,幫助建立「行列座標系」思維模型。

完整代碼還原

public class DiamondPrint {
    public static void main(String[] args) {
        int row = 7;           // 總行數(建議奇數對稱)
        int starCount;         // 當前行星號數
        int spaceCount;        // 當前行前導空格數
        String star = "*";
        
        for (int i = 1; i <= row; i++) {  // 外層循環:控制行號 1~7
            String line = "";               // 當前行字符串構建器
            
            // 核心邏輯:判斷上半部分還是下半部分
            if (i * 2 - 1 > row) {          // 超過中間行(第4行)
                // 下半部分:星號遞減
                starCount = (row - i) * 2 + 1;
                spaceCount = (row - starCount) / 2;
            } else {
                // 上半部分:星號遞增
                starCount = i * 2 - 1;
                spaceCount = (row - starCount) / 2;
            }
            
            // 內層循環1:拼接前導空格
            for (int j = 0; j < spaceCount; j++) {
                line += " ";
            }
            
            // 內層循環2:拼接星號
            for (int j = 0; j < starCount; j++) {
                line += star;
            }
            
            System.out.println(line);  // 輸出當前行並換行
        }
    }
}

逐行核心邏輯解析

變量定義區

  • row = 7:菱形總行數,決定菱形大小,建議奇數保證上下對稱
  • starCount、spaceCount:行級變量,每行重新計算,存儲當前行屬性
  • star = "*":字符常量,便於修改打印字符(如改為"#"、"@")

外層循環:行控制器

for (int i = 1; i <= row; i++)  // i 代表當前行號:1,2,3,4,5,6,7

每次迭代處理一行完整輸出,i是核心自變量,所有行屬性由i推導。

分支判斷:上下半部分分水嶺

if (i * 2 - 1 > row)  // 等價於 i > (row+1)/2,即 i > 4
  • 上半部分(i=1,2,3,4):星號數1,3,5,7,公式2*i-1
  • 下半部分(i=5,6,7):星號數5,3,1,公式(row-i)*2+1
  • 空格數統一公式:(row - starCount) / 2,利用總寬度固定推導

內層循環:列構建器

// 空格循環:j從0到spaceCount-1
for (int j = 0; j < spaceCount; j++) line += " ";

// 星號循環:j從0到starCount-1
for (int j = 0; j < starCount; j++) line += star;

兩個循環順序不可顛倒:先空格後星號,才能形成左對齊的菱形視覺效果。

執行軌跡表(row=7)

行號i判斷條件starCountspaceCount輸出效果
11*2-1=1 ≤ 713___*
23 ≤ 732__***
35 ≤ 751_*****
47 ≤ 770*******
59 > 751_*****
611 > 732__***
713 > 713___*

進階優化方向

  1. StringBuilder替換字符串拼接:避免line +=產生大量臨時對象
  2. 提取計算方法:calcStars(row, i)、calcSpaces(row, stars)
  3. 統一公式消除if:int mid = (row+1)/2; int dist = Math.abs(i-mid); stars = 2*(mid-dist)-1;
  4. 參數化設計:支持字符、行數、對齊方式配置

掌握「外層循環遍歷行、內層循環構建列、條件判斷控制行屬性」這一核心模式,配合紙上列表推導公式,所有幾何圖形打印問題都將迎刃而解。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved