การพิมพ์รูปสามเหลี่ยมดาวชิดบน (Upper Star Triangle) ใน Java
รูปสามเหลี่ยมชิดบน (Left-aligned Triangle): ดาวชิดซ้าย เริ่มจาก 1 ดาวเพิ่มขึ้นทีละแถว ใช้ Nested Loops ควบคุมช่องว่างหน้าและดาว
อัลกอริทึม
- รับจำนวนแถว
n - ลูปแถว i = 0 ถึง n-1
- ช่องว่างหน้า: 2*(n-i-1) ช่อง (เพื่อจัดให้อยู่กลาง)
- ดาว: i+1 ดวง (พิมพ์ "* " รวมช่องว่าง)
- ขึ้นบรรทัดใหม่
ตัวอย่างที่ 1: รับค่าจากผู้ใช้ (Scanner)
import java.util.Scanner;
public class UpperStarTriangle {
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++) {
// ช่องว่างหน้า (2 ช่องต่อระดับ เพื่อจัดกลาง)
for (int j = 2 * (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 UpperStarTriangle {
public static void main(String[] args) {
int n = 8;
System.out.println("จำนวนแถว: " + n);
System.out.println("รูปสามเหลี่ยมดาวชิดบน:");
for (int i = 0; i < n; i++) {
System.out.print(" ".repeat(2 * (n - i - 1)));
System.out.println("* ".repeat(i + 1).trim());
}
}
}
ผลลัพธ์ (n=5)
รูปสามเหลี่ยมดาวชิดบน:
*
* *
* * *
* * * *
* * * * *
การปรับปรุง: ใช้ StringBuilder (Java 11+)
public class UpperStarModern {
public static void main(String[] args) {
int n = 8;
StringBuilder sb = new StringBuilder();
for (int i = 0; i < n; i++) {
sb.append(" ".repeat(2 * (n - i - 1)));
sb.append("* ".repeat(i + 1).trim());
sb.append("\n");
}
System.out.print(sb.toString());
}
}
รูปแบบแปรผัน: Upper Triangle แบบ Solid (ไม่มีช่องว่างระหว่างดาว, ชิดซ้าย)
public class UpperSolidTriangle {
public static void main(String[] args) {
int n = 5;
for (int i = 1; i <= n; i++) {
System.out.println("*".repeat(i));
}
}
}
ผลลัพธ์ Solid Left-aligned (n=5)
*
**
***
****
*****
รูปแบบแปรผัน: Upper Triangle แบบ Centered (Solid Pyramid)
public class CenteredUpperTriangle {
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));
}
}
}
ผลลัพธ์ Centered Solid (n=5)
*
***
*****
*******
*********
การวิเคราะห์
- Time: O(n²)
- Space: O(1) เพิ่มเติม
- ช่องว่างหน้า:
2*(n-i-1)ใช้ 2 ช่องต่อระดับ เพื่อจัดให้ดาว "* " อยู่กลาง - ดาว:
i+1ดวง (พิมพ์ "* " รวมช่องว่าง) - รูปแบบนี้คือครึ่งบนของ Pyramid Star Pattern