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