3
*
* *
* * *
* * * *
เช่นเดียวกันกับรูปอื่น ๆ ก่อนหน้านี้ ให้น้อง ๆ ลองสังเกต pattern ของรูปนี้ดู ว่าเป็นยังไง จะได้ว่า
- แถว 1 -> เว้นวรรค 3 ช่อง แล้ว print 1
* - แถว 2 -> เว้นวรรค 2 ช่อง แล้ว print 2
* - แถว 3 -> เว้นวรรค 1 ช่อง แล้ว print 3
* - แถว 4 -> เว้นวรรค 0 ช่อง แล้ว print 4
*
ดังนั้น pattern นี้ไม่ได้คิดแค่จำนวน * อย่างเดียวแล้ว แต่ต้องคิดเป็น 2 ส่วนในแต่ละแถว
1. print ช่องว่างข้างหน้า
2. print *
เราจะเห็นได้ว่า
จำนวนช่องว่าง = จำนวนแถวทั้งหมด - เลขแถว
จำนวน * = เลขแถว
เพราะฉะนั้น ในแต่ละแถว เราจะใช้ loop 2 ตัวข้างใน
ดังนั้นเราก็จะยังใช้ Nested Loop เหมือนเดิม โดยให้
- Loop นอก ควบคุมจำนวนแถว
แต่ว่า Loop ในเราจะมี 2 อัน นั่นก็คือ
- Loop ในตัวแรก ควบคุมจำนวนช่องว่างที่ต้อง print ในแถวนั้น
- Loop ในตัวที่สอง ควบคุมจำนวน
*ที่ต้อง print ในแถวนั้น
ยกตัวอย่างเช่น ในแถวที่ 2 เราต้องการ print ช่องว่าง 2 ช่อง แล้ว print * 2 อัน
เราก็จะสามารถเขียนออกมาเป็นโค้ดได้เป็น
for (int space = 1; space <= 2; space++) {
System.out.print(" ");
}
for (int col = 1; col <= 2; col++) {
System.out.print("* ");
}
Output ที่ได้คือ
* *
กลับมาที่คำถาม แล้วเราจะทำให้ในแต่ละแถว print ช่องว่างกับ * ตามที่เราคิดกันไว้
จำนวนช่องว่าง = จำนวนแถวทั้งหมด - เลขแถว
จำนวน * = เลขแถว
ยังไงล่ะ? คำตอบคือ เราก็ใส่สิ่งที่เราคิดหรือก็คือเงื่อนไข ไว้ในช่องที่กำหนดจำนวนรอบของ Loop ในที่ควบคุมการ print ช่องว่างและ * แต่ละอันสิ
โดยเราจะกำหนดให้มีตัวแปร n แทนจำนวนแถวทั้งหมด
int n = 4;
จำนวนช่องว่างข้างหน้า คือ
n - row
จำนวน * คือ
row
เราก็จะได้โค้ดแบบนี้
int n = 4;
for (int row = 1; row <= n; row++) {
for (int space = 1; space <= n - row; space++) {
System.out.print(" ");
}
for (int col = 1; col <= row; col++) {
System.out.print("* ");
}
System.out.println();
}
Output ที่ได้คือ
*
* *
* * *
* * * *
ซึ่ง Loop นอกของเรา จะทำหน้าที่ควบคุมจำนวน row
for (int row = 1; row <= n; row++)
Loop นี้หมายความว่า ให้ทำงานทั้งหมด n แถว ในที่นี้ก็คือ 4 แถว
จากนั้น Loop ในตัวแรก จะทำหน้าที่ควบคุมจำนวนช่องว่างข้างหน้า
for (int space = 1; space <= n - row; space++)
Loop นี้หมายความว่า ในแต่ละแถว ให้ print ช่องว่างข้างหน้าก่อน โดยจำนวนที่ print ออกมาก็คือ n - row
หลังจาก print ช่องว่างเสร็จแล้ว Loop ในตัวที่สอง จะทำหน้าที่ print *
for (int col = 1; col <= row; col++)
Loop นี้หมายความว่า ให้ print * ตามเลขแถวนั้น
หลังจาก Loop ช่องว่างและ Loop * ทำงานครบแล้ว หรือก็คือ print ครบ 1 แถวแล้ว เราก็จะขึ้นบรรทัดใหม่ด้วย
System.out.println();