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

โปรแกรม Java พิมพ์รูปดาวเลข 8 (8 Star Pattern)

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

รูปแบบเลข 8 ประกอบด้วย 3 แถวแนวนอนเต็ม (บน, กลาง, ล่าง) และคอลัมน์ขอบซ้าย-ขวาสำหรับแถวอื่นๆ ขนาดกำหนดโดย n ความสูงรวม = 2n - 1 แถว

อัลกอริทึม

  1. รับขนาด n
  2. ความสูงรวม size = 2*n - 1
  3. ลูปแถว i = 1 ถึง size
  4. ถ้าแถวเป็น 1, n, หรือ size (แถวบน, กลาง, ล่าง): พิมพ์ดาว n ดวง แต่ขอบซ้าย-ขวาเป็นช่องว่าง
  5. แถวอื่น: พิมพ์ดาวเฉพาะคอลัมน์ 1 และ n (ขอบซ้าย-ขวา)

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

import java.util.Scanner;

public class EightPattern {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("ป้อนขนาด: ");
        int n = scanner.nextInt();
        
        System.out.println("รูปแบบเลข 8:");
        int size = 2 * n - 1;
        
        for (int i = 1; i <= size; i++) {
            if (i == 1 || i == n || i == size) {
                // แถวแนวนอนเต็ม (บน, กลาง, ล่าง) - ขอบเป็นช่องว่าง
                for (int j = 1; j <= n; j++) {
                    if (j == 1 || j == n) {
                        System.out.print(" ");
                    } else {
                        System.out.print("*");
                    }
                }
            } else {
                // แถวแนวตั้ง - ขอบซ้ายขวาเป็นดาว
                for (int j = 1; j <= n; j++) {
                    if (j == 1 || j == n) {
                        System.out.print("*");
                    } else {
                        System.out.print(" ");
                    }
                }
            }
            System.out.println();
        }
    }
}

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

public class EightPattern {
    public static void main(String[] args) {
        int n = 8;
        System.out.println("ขนาด: " + n);
        System.out.println("รูปแบบเลข 8:");
        
        int size = 2 * n - 1;
        
        for (int i = 1; i <= size; i++) {
            if (i == 1 || i == n || i == size) {
                for (int j = 1; j <= n; j++) {
                    System.out.print((j == 1 || j == n) ? " " : "*");
                }
            } else {
                for (int j = 1; j <= n; j++) {
                    System.out.print((j == 1 || j == n) ? "*" : " ");
                }
            }
            System.out.println();
        }
    }
}

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

รูปแบบเลข 8:
 **
*  *
*  *
 ****
*  *
*  *
 **

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

public class EightPatternModern {
    public static void main(String[] args) {
        int n = 8;
        int size = 2 * n - 1;
        StringBuilder sb = new StringBuilder();
        
        String topBottom = " " + "*".repeat(n - 2) + " ";
        String middle = "*" + " ".repeat(n - 2) + "*";
        
        for (int i = 1; i <= size; i++) {
            if (i == 1 || i == n || i == size) {
                sb.append(topBottom);
            } else {
                sb.append(middle);
            }
            sb.append("\n");
        }
        
        System.out.print(sb.toString());
    }
}

รูปแบบแปรผัน: ใช้ตัวเลข 8 แทนดาว

public class NumberEightPattern {
    public static void main(String[] args) {
        int n = 6;
        int size = 2 * n - 1;
        
        for (int i = 1; i <= size; i++) {
            if (i == 1 || i == n || i == size) {
                System.out.println(" " + "8".repeat(n - 2) + " ");
            } else {
                System.out.println("8" + " ".repeat(n - 2) + "8");
            }
        }
    }
}

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

  • Time: O(n²)
  • Space: O(1) เพิ่มเติม
  • แถวสำคัญ: 1 (บน), n (กลาง), 2n-1 (ล่าง) = แถวแนวนอน
  • แถวอื่น: แนวตั้งขอบซ้าย-ขวา

ข้อสังเกต

  • n ต้อง >= 3 เพื่อให้รูป 8 ชัดเจน (n=2 จะได้แค่สี่เหลี่ยม)
  • ความกว้างคงที่ = n คอลัมน์
  • ความสูง = 2n - 1 แถว