การพิมพ์รูปแบบดาวเลข 8 (8 Star Pattern) ใน Java
รูปแบบเลข 8 ประกอบด้วย 3 แถวแนวนอนเต็ม (บน, กลาง, ล่าง) และคอลัมน์ขอบซ้าย-ขวาสำหรับแถวอื่นๆ ขนาดกำหนดโดย n ความสูงรวม = 2n - 1 แถว
อัลกอริทึม
- รับขนาด
n - ความสูงรวม
size = 2*n - 1 - ลูปแถว i = 1 ถึง size
- ถ้าแถวเป็น 1, n, หรือ size (แถวบน, กลาง, ล่าง): พิมพ์ดาว n ดวง แต่ขอบซ้าย-ขวาเป็นช่องว่าง
- แถวอื่น: พิมพ์ดาวเฉพาะคอลัมน์ 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 แถว