Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Java

โปรแกรม Java พิมพ์รูปดาวเพชร (Diamond Star Pattern)

การพิมพ์รูปแบบดาวเพชร (Diamond Star Pattern) ใน Java

รูปเพชร (Diamond) ประกอบด้วยพีระมิดบน (บวก) และพีระมิดล่าง (กลับ) รวมกัน ใช้ Nested Loops ควบคุมช่องว่างและดาวในแต่ละครึ่ง

อัลกอริทึม

  1. รับจำนวนแถว n (สำหรับครึ่งบน)
  2. ความสูงรวม = 2n - 1 แถว
  3. ครึ่งบน: ลูป i = 1 ถึง n, ช่องว่าง n-i, ดาว 2*i-1
  4. ครึ่งล่าง: ลูป i = 1 ถึง n-1, ช่องว่าง i, ดาว 2*(n-i)-1

ตัวอย่างที่ 1: รับค่าจากผู้ใช้ (Scanner)

import java.util.Scanner;

public class DiamondStarPattern {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("ป้อนจำนวนแถว: ");
        int n = scanner.nextInt();
        
        System.out.println("รูปแบบเพชรดาว:");
        
        // ครึ่งบน
        for (int i = 1; i <= n; i++) {
            // ช่องว่าง
            for (int j = 1; j <= n - i; j++) {
                System.out.print(" ");
            }
            // ดาว
            for (int j = 1; j <= 2 * i - 1; j++) {
                System.out.print("*");
            }
            System.out.println();
        }
        
        // ครึ่งล่าง
        for (int i = 1; i <= n - 1; i++) {
            // ช่องว่าง
            for (int j = 1; j <= i; j++) {
                System.out.print(" ");
            }
            // ดาว
            for (int j = 1; j <= 2 * (n - i) - 1; j++) {
                System.out.print("*");
            }
            System.out.println();
        }
    }
}

ตัวอย่างที่ 2: ค่าคงที่ (Hardcoded)

public class DiamondStarPattern {
    public static void main(String[] args) {
        int n = 8;
        System.out.println("จำนวนแถว: " + n);
        System.out.println("รูปแบบเพชรดาว:");
        
        // ครึ่งบน
        for (int i = 1; i <= n; i++) {
            System.out.print(" ".repeat(n - i));
            System.out.println("*".repeat(2 * i - 1));
        }
        
        // ครึ่งล่าง
        for (int i = 1; i <= n - 1; i++) {
            System.out.print(" ".repeat(i));
            System.out.println("*".repeat(2 * (n - i) - 1));
        }
    }
}

ผลลัพธ์ (n=5)

รูปแบบเพชรดาว:
    *
   ***
  *****
 *******
*********
 *******
  *****
   ***
    *

การปรับปรุง: ใช้ StringBuilder (Java 11+)

public class DiamondStarModern {
    public static void main(String[] args) {
        int n = 8;
        StringBuilder sb = new StringBuilder();
        
        // ครึ่งบน
        for (int i = 1; i <= n; i++) {
            sb.append(" ".repeat(n - i));
            sb.append("*".repeat(2 * i - 1));
            sb.append("\n");
        }
        
        // ครึ่งล่าง
        for (int i = 1; i < n; i++) {
            sb.append(" ".repeat(i));
            sb.append("*".repeat(2 * (n - i) - 1));
            sb.append("\n");
        }
        
        System.out.print(sb.toString());
    }
}

รูปแบบแปรผัน: Hollow Diamond (เพชรว่าง)

public class HollowDiamond {
    public static void main(String[] args) {
        int n = 5;
        
        // ครึ่งบน
        for (int i = 1; i <= n; i++) {
            System.out.print(" ".repeat(n - i));
            if (i == 1) {
                System.out.println("*");
            } else {
                System.out.println("*" + " ".repeat(2 * i - 3) + "*");
            }
        }
        
        // ครึ่งล่าง
        for (int i = n - 1; i >= 1; i--) {
            System.out.print(" ".repeat(n - i));
            if (i == 1) {
                System.out.println("*");
            } else {
                System.out.println("*" + " ".repeat(2 * i - 3) + "*");
            }
        }
    }
}

ผลลัพธ์ Hollow Diamond (n=5)

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

การวิเคราะห์

  • Time: O(n²)
  • Space: O(1) เพิ่มเติม
  • สูตรดาว: 2*i - 1 (เลขคี่: 1, 3, 5, 7, ...)
  • ช่องว่างครึ่งบน: n - i ลดลง
  • ช่องว่างครึ่งล่าง: i เพิ่มขึ้น