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

โปรแกรม Java พิมพ์รูปดาวแบบ X (X Star Pattern)

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

รูปแบบ X ประกอบด้วยเส้นทแยงมุมสองเส้นที่ตัดกัน ใช้ Nested Loops ควบคุมการพิมพ์ดาว (*) และช่องว่าง

อัลกอริทึม

  1. รับขนาด n (จำนวนแถว/คอลัมน์ของครึ่งหนึ่ง)
  2. ขนาดรูปเต็ม = 2n - 1 (จำนวนแถวและคอลัมน์)
  3. ลูปแถว i = 1 ถึง 2n-1
  4. ลูปคอลัมน์ j = 1 ถึง 2n-1
  5. พิมพ์ 'X' ถ้า j == i (เส้นทแยงหลัก) หรือ j == 2n - i (เส้นทแยงรอง)
  6. พิมพ์ช่องว่างกรณีอื่น

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

import java.util.Scanner;

public class XStarPattern {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("ป้อนขนาด: ");
        int n = scanner.nextInt();
        
        System.out.println("รูปแบบ X Star Pattern:");
        int size = 2 * n - 1;
        
        for (int i = 1; i <= size; i++) {
            for (int j = 1; j <= size; j++) {
                if (j == i || j == size - i + 1) {
                    System.out.print("X");
                } else {
                    System.out.print(" ");
                }
            }
            System.out.println(); // ขึ้นบรรทัดใหม่
        }
    }
}

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

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

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

รูปแบบ X Star Pattern:
X      X
 X    X 
  X  X  
   XX   
  X  X  
 X    X 
X      X

การปรับปรุง: ใช้ StringBuilder (ประสิทธิภาพดีกว่า)

public class XStarPatternOptimized {
    public static void main(String[] args) {
        int n = 8;
        int size = 2 * n - 1;
        StringBuilder sb = new StringBuilder();
        
        for (int i = 1; i <= size; i++) {
            for (int j = 1; j <= size; j++) {
                sb.append((j == i || j == size - i + 1) ? "X" : " ");
            }
            sb.append("\n");
        }
        
        System.out.print(sb.toString());
    }
}

รูปแบบแปรผัน: ใช้ดาว (*) แทน X

// เปลี่ยน "X" เป็น "*" ในโค้ดด้านบน
// ผลลัพธ์จะเป็นดาวแทนตัวอักษร X

การวิเคราะห์ความซับซ้อน

  • Time: O(n²) - nested loops
  • Space: O(1) เพิ่มเติม (หรือ O(n²) ถ้าเก็บใน StringBuilder)
  • เหมาะสำหรับการฝึกฝน Loop และ Logic การพิมพ์รูปแบบ

ข้อสังเกต

  • ดัชนีเริ่มที่ 1 เพื่อให้คณิตศาสตร์ง่ายขึ้น (i, j เริ่มที่ 1)
  • เงื่อนไข j == size - i + 1 คือเส้นทแยงมุมจากขวาบนไปซ้ายล่าง
  • จุดกึ่งกลาง (i == j == n) จะพิมพ์เพียงครั้งเดียว (เงื่อนไข OR)