คำสั่งที่ทำให้เกิดการทำซ้ำในภาษา Java มี 3 รูปแบบหลัก ๆ คือ คำสั่ง for, while และ do while เดี๋ยวเราจะได้ทำความเข้าใจไปพร้อมกันค่ะ
ออกแบบคลาส
ต่อเนื่องจาก ตอนที่ผ่านมา เรามาออกแบบคลาสหนังสือ (books) มาใช้งานกันดีกว่าค่ะ เป็นคลาสง่าย ๆ ไม่มีอะไรซับซ้อนซ้อนเงื่อน
ภาพที่ 1 รูปหนังสือ
คลาส Books ของเรามีคุณสมบัติ 3 อย่างคือ
– ชื่อหนังสือ (title)
– ราคา (price)
– ผู้แต่ง (author)
และมีความสามารถ 2 อย่าง คือ
– กำหนดค่าเริ่มต้น ใช้ในการกำหนดค่าเริ่มต้นตอนสร้างออบเจ็กต์
– แสดงรายละเอียดหนังสือ (showDetails() ) ทำหน้าที่แสดงรายละเอียดข้อมูล
เมื่อวาดคลาสที่ออกแบบไว้ จะได้ดังนี้
ภาพที่ 2 คลาส หนังสือ (UML)
และเปลี่ยนเป็นภาษาอังกฤษ เพื่อใช้เขียนโปรแกรมได้ดังนี้
ภาพที่ 3 คลาส Books (UML)
สร้างโปรเจ็กต์
1. เปิดโปรแกรม NetBeans IDE ขึ้นมา ไปที่ File > New Project
ภาพที่ 4 File > New Project
2. เลือก Java > Java Application และคลิกที่ปุ่ม Next
ภาพที่ 5 Java > Java Application > Next
3. ตั้งชื่อโปรเจ็กต์ว่า Learing Loops จากนั้นสร้างแพ็กเกจและไฟล์ Main และคลิกที่ปุ่ม Finish
ภาพที่ 6 รายละเอียดโปรเจ็กต์
4. เราจะได้โครงสร้างของของโปรเจ็กต์ดังนี้
ภาพที่ 7 โครงสร้างโปรเจ็กต์
5. ในเบื้องต้น คลาส Main จะมีโค้ดดัง ภาพที่ 8
ภาพที่ 8 โค้ดในคลาส Main
สร้างคลาส Books
1. คลิกขวาที่แพ็กเกจ com.thjava ไปที่ New เลือก Java Class
ภาพที่ 9 New > Java Class
2. ตั้งชื่อคลาสว่า Books และคลิกที่ปุ่ม Finish
ภาพที่ 10 สร้างคลาสBooks
3. เราจะได้ไฟล์ Books.java ขึ้นมา
ภาพที่ 11 แสดงไฟล์ Books.java
4. ในเบื้องต้น มีโค้ดดัง ภาพที่ 12
ภาพที่ 12 แสดงโค้ดในคลาส Books
5. ประกาศตัวแปรทั้ง 3 ตัว คือ title, price และ author และกำหนดการเข้าถึงเป็นแบบ private คือเรียกใช้งานได้เฉพาะภายในคลาสของตัวเองเท่านั้น
ภาพที่ 13 ประกาศตัวแปร
สร้างคอนสตรัคเตอร์
1. คลิกที่พื้นที่ว่าง เตรียมสร้างคอนสตรัคเตอร์
ภาพที่ 14 เตรียมเขียนโค้ด
2. กดคีย์ลัด Alt + Insert และเลือก Constructor
ภาพที่ 15 เลือก Constructor
3. คลิกที่ Select All และคลิกที่ปุ่ม Generate
ภาพที่ 16 สร้าง constructor
4. เราจะได้โค้ดการสร้าง Constructor ขึ้นมา
ภาพที่ 17 แสดงโค้ด Constructor
สร้างเมธอด showDetails()
1. คลิกหาพื้นที่ว่าง เตรียมสร้างเมธอด
ภาพที่ 18 เตรียมเขียนโค้ด
2. สร้างเมธอดชื่อ showDetails() เป็นเมธอดที่ไม่รับค่า และไม่คืนค่าอะไร
ภาพที่ 19 เมธอด showDetails()
3. ประกาศตัวแปรชื่อ text มารับค่าข้อความ และตัวแปรต่าง ๆ โดยจัดตกแต่งการแสดงผลให้สวยงาม
ภาพที่ 20 เตรียมข้อความที่จะแสดงผล
4. สั่งแสดงผลค่าในตัวแปร text
ภาพที่ 21 สั่งแสดงผล
ตอนนี้เราก็สร้างคลาส Books เสร็จเรียบร้อยแล้ว หัวข้อต่อไปเราจะสร้างออบเจ็กต์จากคลาส Books เพื่อใช้งานจริงกันค่ะ
สร้างออบเจ็กต์จากคลาส Books
1. มาที่ไฟล์ Main.java คลิกหาพื้นที่ว่าง เพื่อเตรียมสร้างออบเจ็กต์
ภาพที่ 22 เตรียมเขียนโค้ด
2. สร้างออบเจ็กต์จากคลาส Books ขึ้นมา พร้อมกับกำหนดค่าเริ่มต้น ดังภาพที่ 23
ภาพที่ 23 สร้างออบเจ็กต์
3. จากนั้น ใช้ออบเจ็กต์ชื่อ obj1 เรียกใช้เมธอด showDetails() เพื่อให้แสดงผลข้อมูลออกมา
ภาพที่ 24 เรียกใช้เมธอด
4. กด F6 เพื่อสั่ง Run เราจะได้ผลลัพธ์ออกมาที่ส่วนของ Output
ภาพที่ 25 แสดงผลลัพธ์
5. สร้างออบเจ็กต์ขึ้นมาอีก 4 ออบเจ็กต์ และสั่งแสดงผลทุก ๆ ออบเจ็กต์
ภาพที่ 26 สร้างออบเจ็กต์ และเรียกใช้เมธอด
6. กด F6 เพื่อ Run โปรเจ็กต์ เราจะเห็นรายการหนังสือแสดงผล 5 เล่ม
ภาพที่ 27 แสดงผลลัพธ์
ลองจิตนาการดูว่า ถ้าเรามีหนังสือเป็นพัน เป็นหมื่นเล่ม เราจะเขียนโค้ด สั่งให้แสดงผลไหวหรือไม่? โชคดีที่มีคำสั่ง “การทำซ้ำ” เตรียมว้ให้เราใช้งานแล้ว
แต่ก่อนที่จะไปถึงตรงนั้น เรามาทำคสามรู้จักกับ ArrayList กันก่อนค่ะ
เพื่อให้การจัดส่งออบเจ็กต์เป็นไปอย่างง่ายดายมากขึ้น เราจะเก็บออบเจ็กต์ของเราทั้งหมด แพ็กลงไปในกล่องที่เรียกว่า ArrayList ซึ่งมีวิธีการเขียนโค้ดดังนี้
สร้าง ArrayList ใช้เก็บข้อมูลออบเจ็กต์
1. ประกาศตัวแปร ArrayList ของคลาส Books ขึ้นมา และกด Ctrl + Shift + I เพื่อ import ไฟล์ให้เรียบร้อย
ภาพที่ 28 ประกาศ ArrayList ของคลาส Books
2. สร้างออบเจ็กต์จาก ArrayList ขึ้นมา
ภาพที่ 29 สร้างออบเจ็กต์
3. เรียกใช้เมธอด add() เพื่อเพิ่มออบเจ็กต์ลงไปในกล่อง
ภาพที่ 30 เก็บออบเจ็ก์ลงใน ArrayList
เพียงเท่านี้ bList ก็เก็บออบเจ็กต์ทั้งหมดของเราไว้แล้ว เราสามารถส่ง bList ไปใช้งานที่ไหนก็ได้ ตามต้องการ
สร้างคลาส Loops
เราจะสร้างคลาส Loops ขึ้นมา ภายในจะมีเมธอดที่ทำหน้าที่ ทำซ้ำเพื่อดึงค่าจาก ArrayList ออกมาแสดงผล เรามาดูกันค่ะว่า การใช้คำสั่งทำซ้ำนั้น จะทำให้โค้ดของเราลดลงได้มากแค่ไหน
1. คลิกขาวที่ แพ็กเก็จ com.thjava ไปที่ New เลือก Java Class
ภาพที่ 31 New > Java Class
2. ตั้งชื่อคลาสว่า Loops และคลิกที่ปุ่ม Finish
ภาพที่ 32 สร้างคลาส Loops
3. เราจะได้ไฟล์ Loops.java ขึ้นมา
ภาพที่ 33 ไฟล์ Loops.java
4. เบื้องต้น ภายในคลาส Loops มีโค้ดดังต่อไปนี้
ภาพที่ 34 แสดงโค้ดในคลาส Loops
สร้างเมธอด forLoop1
1. คลิกหาพื้นที่ว่าง เตรีมสร้างเมธอด
ภาพที่ 35 เตรียมเขียนโค้ด
2. สร้างเมธอดชื่อ forLoop1() รับค่าชนิด ArrayList ของคลาส Books เข้ามา โดยตั้งชื่อตัวแปรว่า bList (จะตั้งชื่อตัวแปรว่าอะไรก็ได้)
ภาพที่ 36 สร้างเมธอด forLoop1()
3. กด Ctrl + Shift + i เพื่อ import ไฟล์ให้เรียบร้อย เส้นสีแดงใต้ ArrayList จะหายไป
ภาพที่ 37 การ import
4. เตรียมใช้คำสั่ง for เพื่อทำซ้ำ คือการทำซ้ำ เพื่อดึงออบเจ็กต์ที่เก็บอยู่ใน ArrayList ออกมาทีละออบเจ็กต์ จนหมด
ภาพที่ 38 คำสั่ง for
5. ประกาศตัวแปร i กำหนดค่าเริ่มต้นให้ = 0
ภาพที่ 39 กำหนดค่าเริ่มต้น
6. กำหนดเงื่อนไขว่า ถ้าค่า i น้อยกว่า จำนวนออบเจ็กต์ที่ bList บรรจุมา ให้ทำซ้ำไปเรื่อย ๆ โดยใช้คำสั่ง i < bList.size()
ภาพที่ 40 กำหนดเงื่อนไข
7. หลังจากทำซ้ำไปแต่ละรอบ เราจะเพิ่มค่า i ขึ้นที่ละหนึ่ง หรือเป็นการนับรอบที่ทำซ้ำนั่นเอง
ภาพที่ 41 กำหนดการเพิ่ม/ลดค่า
8. แล้วเราจะทำซ้ำอะไรกันละ? ก็ดึงออบเจ็กต์ ชนิด Books ที่เก็บอยู่ใน bList ออกมาไง งั้นเราเริ่มต้นด้วยการใช้ตัวแปร bList ก่อนเลย
ภาพที่ 42 ใช้ bList (ค่าที่รับมา)
9. จากนั้น เรียกใช้เมธอด get() พร้อมกับส่งตำแหน่งที่ i ไปให้เมธอด จะทำให้เราได้ออบเจ็กต์ ที่เก็บอยู่ในตำแหน่งต่าง ๆ ของ bList กลับมา (ซึ่งจะอธิบายอย่างละเอียดอีกครั้งในหัวข้อการใช้งาน ArrayList ตอนนี้ให้มุ่งความสนใจไปที่เรื่อง “การทำซ้ำ” ก่อนนะคะ)
ภาพที่ 43 เรียกใช้เมธอด get()
10. เมื่อเราเข้าถึงออบเจ็กต์ต่าง ๆ ใน bList ได้แล้ว ก็จะสามารถเรียกใช้เมธอด showDetails() ได้
ภาพที่ 44 เรียกใช้เมธอด showDetails()
เสร็จไปแล้วค่ะ สำหรับการใช้งาน for แบบที่ 1 เราไปทดสอบเมธอดนี้กันนะค่ะ
สั่งแสดงจำนวนออบเจ็กต์ใน bList
1. กลับมาที่ไฟล์ Main.java ลบคำสั่งการแสดงผลเดิมทิ้งไป
ภาพที่ 45 ลบคำสั่งที่ไฮไลท์
2. เราจะเหลือโค้ดดังนี้
ภาพที่ 46 โค้ดที่เหลือในคลาส Main
3. คลิกหาพื้นที่ว่าง เตรียมเขียนโค้ดใหม่
ภาพที่ 47 เตรียมเขียนโค้ด
4. เราจะสั่งแสดงผลจำนวนออบเจ็กต์ที่เก็บอยู่ใน bList ด้วยการเรียกใช้เมธอด size()
ภาพที่ 48 แสดงขนาด bList
5. ลองกด F6 เพื่อสั่ง Run เราจะได้ขนาด bList คือ 5 ออกมา เพราะเรา add() ออบเจ็กต์เข้าไป 5 ออบเจ็กต์
ภาพที่ 49 แสดงผลลัพธ์
6. เพิ่มคำสั่งเว้นบรรทัดสักหน่อย จะทำให้ Output ดูสบายตามากขึ้นค่ะ
ภาพที่ 50 เว้นวรรค 1 บรรทัด
7. กด F6 สั่ง Run อีกครั้ง จะเห็นว่า ตรง BUILD SUCCESSFUL ขยับลงไป 1 บรรทัด
ภาพที่ 51 แสดงผลลัพธ์
ทดสอบ for แบบที่ 1
1. คลิกหาพื้นที่ว่าง เตรียมสร้างออบเจ็กต์จากคลาส Loops
ภาพที่ 52 เตรียมเขียนโค้ด
2. สร้างออบเจ็กต์จากคลาส Loop ตั้งชื่อตัวแปรว่า loop
ภาพที่ 53 สร้างออบเจ็กต์
3. เรียกใช้เมธอด forLoop1 พร้อมกับส่ง bList ไปให้
ภาพที่ 54 เรียกใช้เมธอด forLoop1()
4. กด F6 เพื่อสั่ง Run จะเห็นว่า ออบเจ็กต์ทั้ง 5 ที่อยู่ใน bList แสดงผลออกมาแล้ว
ภาพที่ 55 แสดงผลลัพธ์
เป็นไงบ้างคะกับ for แบบที่ 1 ถ้ายังไม่เข้าใจดีนัก ย้อนกลับไปทบทวนก่อนก็ได้ค่ะ และเราไปต่อกันที่ for แบบที่ 2 กันนะคะ
สร้างเมธอด forLoop2
1. มาที่ไฟล์ Loops.java คลิกหาพื้นที่ว่าง เตรียมสร้างเมธอด
ภาพที่ 56 เตรียมเขียนโค้ด
2.สร้างเมธอดชื่อ forLoop2 ขึ้นมา รับค่า ArrayList ของคลาส Books ตั้งชื่อว่า bListไม่คืนค่าใด ๆ
ภาพที่ 57 เมธอด forLoop2
3. เตรียใช้คำสั่ง for แบบที่ 2
ภาพที่ 58 คำสั่ง for
4. เงื่อนไขที่เราจะใส่ลงไปในวงเล็บ คือ ประกาศตัวแปรชนิด Books ขึ้นมา
ภาพที่ 59 ประกาศชนิดตัวแปร Books
5. ตั้งชื่อตัวแปรว่า b
ภาพที่ 60 ตั้งชื่อตัวแปร
6. ตามด้วยเครื่องหมายโคลอน (:) และตัวแปร bList ความหมายของโค้ดในบรรทัดนี้คือ
จะทำซ้ำ โดยการดึงข้อมูลจาก bList ออกมา ไปเก็บไว้ในตัวแปร b และทำซ้ำจนกว่าข้อมูลจะหมด แล้วเงื่อนไขจะกลายเป็นเท็จ และก็จะออกจากการทำซ้ำไป
ภาพที่ 61 ดึงค่าจาก bList มาเก็บใน b
7. ต่อมาใช้ตัวแปร b เรียกใช้เมธอด showDetails() แค่นี้ก็เสร็จแล้วค่ะ
ภาพที่ 62 เรียกใช้เมธอด showDetails()
ทดสอบเมธอด forLoop2
1. มาที่คลาส Main เปลี่ยนโค้ดเป็นการเรียกใช้เมธอด forLoop2 แทน
ภาพที่ 63 เรียกใช้เมธอด forLoop2
2. กด F6 เพื่อ Run โปรเจ็กต์ จะเห็นว่า เราได้ผลลัพธ์เช่มเดิม
ภาพที่ 64 แสดงผลลัพธ์
สร้างเมธอด whileLoop
1. มาที่ไฟล์ Loops.java คลิกหาพื้นที่ว่าง เตรียมสร้างเมธอดใหม่
ภาพที่ 65 เตรียมเขียนโค้ด
2. สร้างเมธอดชื่อ whileLoop รับ ArrayList ชนิด Books เข้ามา ตั้งชื่อว่า bList เป็นเมธอดที่ไม่มีการคืนค่าใด ๆ
ภาพที่ 66 เมธอด whileLoop
3. ประกาศตัวแปร i ขึ้นมา มีชนิดเป็น int กำหนดค่าเริ่มต้นให้เท่ากับ 0
ภาพที่ 67 ประกาศตัวแปร และกำหนดค่า
4. เตรียมใช้คำสั่ง while
ภาพที่ 68 คำสั่ง while
5. เงื่อนไขในวงเล็บ คือ ถ้าค่า i น้อยกว่าขนาดของ bList เงื่อนไขจะเป็นเท็จ และออกจาก loop ไป สามารถเขียนได้ดังนี้ i < bList.size()
ภาพที่ 69 เพิ่มเงื่อนไขการทำซ้ำ
6. จากนั้น ใช้ bList เรียกใช้เมธอด get พร้อมกับส่งค่า i ไปให้
ภาพที่ 70 ใช้ bList เรียกใช้เมธอด get()
7. ต่อมาเรียกใช้เมธอด showDetails()
ภาพที่ 71 เรียกใช้เมธอด showDetails()
8. สุดท้าย อันนี้สำคัญมาก เพิ่มค่าตัวแปร i ขึ้นทีละ 1 แค่นี้เมธอดของเราก็เสร็จเรียบร้อยแล้ว ไปทดสอบใช้งานกันดีกว่าค่ะ
ภาพที่ 72 เพิ่มค่า i ที่ละ 1
ทดสอบเมธอด whileLoop
1. มาที่ไฟล์ Main.java แก้ไขโค้ดให้เรียกใช้เมธอด whileLoop แทน
ภาพที่ 73 เรียกใช้เมธอด whileLoop()
2. กด F6 เพื่อสั่ง Run เราก็จะได้ผลลัพธ์ เช่นเดิม
ภาพที่ 74 แสดงผลลัพธ์
สร้างเมธอด doWhile Loop
1. มาที่ไฟล์ Loops.java คลิกหาพื้นที่ว่าง เตรียมสร้างเมธอดใหม่
ภาพที่ 75 เตรียมเขียนโค้ด
2. สร้างเมธอดชื่อ doWhileLoop รับ ArrayList ชนิด Books เข้ามา ตั้งชื่อว่า bList เป็นเมธอดที่ไม่มีการคืนค่าใด ๆ
ภาพที่ 76 เมธอด doWhileLoop()
3. ประกาศตัวแปร i ขึ้นมา มีชนิดเป็น int กำหนดค่าเริ่มต้นให้เท่ากับ 0
ภาพที่ 77 ประกาศตัวแปร พร้อมกำหนดค่าเริ่มต้น
4. เตรียมใช้คำสั่ง do while
ภาพที่ 78 คำสั่ง do while
5. ในส่วนของ do คือคำสั่งที่โปรแกรมจะทำก่อน 1 ครั้งเสมอ ก่อนที่จะไปตรวจสอบเงื่อนไขที่ส่วนของ while
ให้เราเขียนโค้ดเดิมคือ ใช้ bList เรียกใช้เมธอด get พร้อมกับสั่งค่า i ไปให้ จากนั้นก็เรียกใช้เมธอด showDetails()
ภาพที่ 79 แสดงค่าออบเจ็กต์แต่ละตัวใน bList
6. ส่วนสำคัญอีกเช่นเคย เพิ่มค่า i ขึ้นทีละ 1
ภาพที่ 80 เพิ่มค่า i ทีละ 1
7. เงื่อนไขในการทำซ้ำ ก็เช่มเดิม ในวงเล็บ ถ้าค่า i น้อยกว่าขนาดของ bList เงื่อนไขจะเป็นเท็จ และออกจาก loop ไป สามารถเขียนได้ได้ดังนี้ i < bList.size()
ภาพที่ 81 เพิ่มเงื่อนไขการทำซ้ำ
แค่นี้เมธอดของเราก็เสร็จเรียบร้อยแล้ว มาทดสอบใช้งานกันดีกว่าค่ะ
ทดสอบเมธอด doWhileLoop
1. มาที่ไฟล์ Main.java แก้ไขโค้ดให้เรียกใช้เมธอด doWhileLoop แทน
ภาพที่ 82 เรียกใช้เมธอด doWhileLoop()
2. กด F6 เพื่อสั่ง Run เราก็จะได้ผลลัพธ์ เช่นเดิม
ภาพที่ 83 แสดงผลลัพธ์
เดินทางกันมาอย่างยาวนานกับเรื่อง “การทำซ้ำ” หรือ “Loop“หวังว่าจะมองเห็นความสำคัญของคำสั่งเหล่านี้นะคะ หัดใช้บ่อย ๆ ฝึกเขียนมาก ๆ ประสบการณ์ จะทำให้เราเข้าใจอะไรได้อย่างลึกซึ้งมากขึ้นค่ะ
งั้นขอให้การบ้านเลยละกัน ลองเพิ่มออบเจ็กต์จากคลาส Books และ add ลงไปใน ArrayList จากนั้นก็เรียกใช้เมธอดต่าง ๆ เช่มเดิมดูนะคะ ได้ผลลัพธ์อย่างไร อย่าลืมแวะมาเล่าให้ฟังบ้าง แล้วพบกันในตอนต่อไปค่ะ 🙂