การพิมพ์รูปแบบดาวเพชร (Diamond Star Pattern) ใน Java
รูปเพชร (Diamond) ประกอบด้วยพีระมิดบน (บวก) และพีระมิดล่าง (กลับ) รวมกัน ใช้ Nested Loops ควบคุมช่องว่างและดาวในแต่ละครึ่ง
อัลกอริทึม
- รับจำนวนแถว
n(สำหรับครึ่งบน) - ความสูงรวม =
2n - 1แถว - ครึ่งบน: ลูป i = 1 ถึง n, ช่องว่าง n-i, ดาว 2*i-1
- ครึ่งล่าง: ลูป 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เพิ่มขึ้น