首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 程式設計入門

Java 實作:靈活打印任意大小的菱形圖案

     編輯:Java 程式設計入門

前言

在 Java 程式設計的基礎練習中,打印幾何圖形是經典的邏輯訓練題目。本文將展示如何使用巢狀迴圈與條件判斷,繪製出任意指定大小(對角線長度)的菱形。程式碼採用數學座標的思維,透過行列索引關係精確控制星號的輸出位置。

核心邏輯解析

菱形可視為正方形區域內的特定像素點集合。假設菱形的對角線長度為 number(必須為奇數),則總共需要打印 number 行,每行 number 列。關鍵在於判斷當前座標 (i, y) 是否落在菱形的四條邊界上:

  • 左上邊:y == number/2 - i
  • 右上邊:y == number/2 + i
  • 左下邊:i == number/2 + y
  • 右下邊:y == number - i + number/2 - 1 且 i > number/2

滿足任一條件即輸出 *,否則輸出空格,最後換行。

完整程式碼實作

public class RhombusPrinter {
    public static void main(String[] args) {
        // 設定菱形對角線長度 (需為奇數)
        printRhombus(29);
    }

    /**
     * 打印指定大小的菱形
     * @param number 對角線長度,建議使用奇數
     */
    private static void printRhombus(int number) {
        for (int i = 0; i < number; i++) {          // 控制行
            for (int y = 0; y < number; y++) {      // 控制列
                // 判斷是否為菱形邊界點
                if (y == number/2 - i 
                 || y == number/2 + i 
                 || i == number/2 + y 
                 || (y == number - i + number/2 - 1 && i > number/2)) {
                    System.out.print("*");
                } else {
                    System.out.print(" ");
                }
            }
            System.out.println(); // 換行
        }
    }
}

執行結果展示 (以 29 為例)

                            *                            
                           * *                           
                          *   *                          
                         *     *                         
                        *       *                        
                       *         *                       
                      *           *                      
                     *             *                     
                    *               *                    
                   *                 *                   
                  *                   *                  
                 *                     *                 
                *                       *                
               *                         *               
              *                           *              
             *                             *             
            *                               *            
           *                                 *           
          *                                   *          
         *                                     *         
        *                                       *        
       *                                         *       
      *                                           *      
     *                                             *     
    *                                               *    
   *                                                 *   
  *                                                   *  
 *                                                     * 
*                                                       *
 *                                                     * 
  *                                                   *  
   *                                                 *   
    *                                               *    
     *                                             *     
      *                                           *      
       *                                         *       
        *                                       *        
         *                                     *         
          *                                   *          
           *                                 *           
            *                               *            
             *                           *              
              *                         *               
               *                       *                
                *                     *                 
                 *                   *                  
                  *                 *                   
                   *               *                    
                    *             *                     
                     *           *                      
                      *         *                       
                       *       *                        
                        *     *                         
                         *   *                          
                          * *                           
                           *                            

進階思考

程式碼中保留了多個演進版本的方法(scriber1 到 scriber4),展示了從簡單的左上角邊界嘗試,到完整四邊封閉的重構過程。這對於理解迴圈不變量與邊界條件的調試非常有幫助。若需支援偶數大小,只需調整中線計算邏輯即可。

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