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

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

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

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

อัลกอริทึม

  1. รับจำนวนแถว n
  2. ส่วนบน: ลูป i = 0 ถึง n-1, พิมพ์ดาว i+1 ดวง
  3. ส่วนล่าง: ลูป i = 1 ถึง n-1, พิมพ์ดาว n-i ดวง
  4. ขึ้นบรรทัดใหม่หลังแต่ละแถว

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

import java.util.Scanner;

public class HalfDiamondPattern {
    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 = 0; i < n; i++) {
            for (int j = 0; j <= i; j++) {
                System.out.print("*");
            }
            System.out.println();
        }
        
        // ส่วนล่าง: ลดดาว
        for (int i = 1; i < n; i++) {
            for (int j = i; j < n; j++) {
                System.out.print("*");
            }
            System.out.println();
        }
    }
}

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

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

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

รูปแบบครึ่งเพชร:
*
**
***
****
*****
****
***
**
*

การปรับปรุง: ใช้ StringBuilder และ String.repeat() (Java 11+)

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

รูปแบบแปรผัน: Half Diamond แบบมีช่องว่าง (Centered)

public class CenteredHalfDiamond {
    public static void main(String[] args) {
        int n = 5;
        
        // ส่วนบน
        for (int i = 1; i <= n; i++) {
            // ช่องว่างหน้า
            System.out.print(" ".repeat(n - i));
            // ดาว
            System.out.println("*".repeat(2 * i - 1));
        }
        
        // ส่วนล่าง
        for (int i = n - 1; i >= 1; i--) {
            System.out.print(" ".repeat(n - i));
            System.out.println("*".repeat(2 * i - 1));
        }
    }
}

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

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

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

  • Time: O(n²) - จำนวนดาวรวมประมาณ n²
  • Space: O(1) เพิ่มเติม (O(n²) ถ้าเก็บใน StringBuilder)
  • ใช้ String.repeat() (Java 11+) ทำให้โค้ดสั้นและอ่านง่าย