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

โปรแกรม Java พิมพ์รูปดาวพีระมิด (Pyramid Star Pattern)

การพิมพ์รูปแบบดาวพีระมิด (Pyramid Star Pattern) ใน Java

พีระมิดดาว (Pyramid) มีฐานกว้างและคมที่ยอด ใช้ Nested Loops: ลูปช่องว่างหน้า (ลดลง) และลูปดาว (เพิ่มขึ้น)

อัลกอริทึม

  1. รับจำนวนแถว n
  2. ลูปแถว i = 0 ถึง n-1
  3. ช่องว่างหน้า: n - i - 1 ช่อง
  4. ดาว: i + 1 ดวง (พิมพ์ "* " รวมช่องว่าง)
  5. ขึ้นบรรทัดใหม่

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

import java.util.Scanner;

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

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

public class PyramidStarPattern {
    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 = n - i - 1; j > 0; j--) {
                System.out.print(" ");
            }
            for (int j = 0; j <= i; j++) {
                System.out.print("* ");
            }
            System.out.println();
        }
    }
}

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

รูปแบบพีระมิดดาว:
    * 
   * * 
  * * * 
 * * * * 
* * * * *

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

public class PyramidStarModern {
    public static void main(String[] args) {
        int n = 8;
        StringBuilder sb = new StringBuilder();
        
        for (int i = 0; i < n; i++) {
            sb.append(" ".repeat(n - i - 1));
            sb.append("* ".repeat(i + 1));
            sb.append("\n");
        }
        
        System.out.print(sb.toString());
    }
}

รูปแบบแปรผัน: Pyramid แบบไม่มีช่องว่างระหว่างดาว

public class SolidPyramid {
    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));
        }
    }
}

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

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

รูปแบบแปรผัน: Number Pyramid

public class NumberPyramidPattern {
    public static void main(String[] args) {
        int n = 5;
        
        for (int i = 1; i <= n; i++) {
            System.out.print(" ".repeat(n - i));
            for (int j = 1; j <= i; j++) {
                System.out.print(j + " ");
            }
            for (int j = i - 1; j >= 1; j--) {
                System.out.print(j + " ");
            }
            System.out.println();
        }
    }
}

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

    1 
   1 2 1 
  1 2 3 2 1 
 1 2 3 4 3 2 1 
1 2 3 4 5 4 3 2 1

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

  • Time: O(n²)
  • Space: O(1) เพิ่มเติม
  • ช่องว่างหน้า: n - i - 1 (0-based) หรือ n - i (1-based)
  • จำนวนดาวแถว i: i + 1 (0-based) หรือ 2*i - 1 (solid pyramid)