5  โครงสร้างโปรแกรมการทำงานแบบวนซ้ำ

วัตถุประสงค์

  1. เพื่อให้เข้าใจการทำงานแบบวนซ้ำ

  2. เพื่อให้เข้าใจการทำงานแบบวนซ้ำแบบซับซ้อน

  3. เพื่อให้สามารถเขียนโปรแกรมด้วยคำสั่ง while, do-while และ for ได้

  4. เพื่อให้สามารถใช้คำสั่ง break และ continue กับการเขียนโปรแกรมแบบวนซ้ำได้

  5. เพื่อให้สามารถเขียนโปรแกรมเพื่อแก้ปัญหาที่มีการทำงานแบบวนซ้ำได้

คอมพิวเตอร์เป็นเครื่องมือที่สามารถทำงานซ้ำ ๆ ได้อย่างมีประสิทธิภาพและรวดเร็วกว่ามนุษย์ เช่น การคำนวณผลการเรียนประจำภาคของนักศึกษาทั้งมหาวิทยาลัย การคำนวณดอกเบี้ยเงินฝากให้กับลูกค้าธนาคารทุกบัญชี เป็นต้น ในการสั่งงานให้คอมพิวเตอร์ทำซ้ำนั้นต้องอาศัยการเขียนโปรแกรมแบบวนซ้ำ การสร้างวงวน (loop) เพื่อให้กลุ่มคำสั่งที่ต้องการทำซ้ำสามารถทำได้ด้วยคำสั่ง while, do-while และ for โดยสร้างเงื่อนไขเพื่อใช้ในการพิจารณาว่าต้องวนซ้ำหรือไม่และจะหยุดวนซ้ำเมื่อใด

5.1 คำสั่ง WHILE

คำสั่ง while เป็นคำสั่งในการควบคุมการทำงานแบบวนซ้ำด้วยการตรวจสอบเงื่อนไข ถ้าเงื่อนไขเป็นจริงจะทำกลุ่มคำสั่งที่อยู่ภายในวงวน เมื่อทำคำสั่งต่าง ๆ ในวงวนเสร็จแล้วจะกลับไปตรวจสอบเงื่อนไขอีกครั้งถ้าเงื่อนไขยังเป็นจริงอยู่ก็จะทำคำสั่งในวงวนซ้ำอีกแล้วกับไปตรวจสอบเงื่อนไขอีกครั้งทำเช่นนี้ไปเรื่อย ๆ จนว่าเงื่อนไขจะเป็นเท็จ คำสั่ง while มีรูปแบบไวยากรณ์ดังนี้

    while (เงื่อนไขการวนซ้ำ) {
            กลุ่มคำสั่งที่ต้องการทำซ้ำ;
            } 

ก่อนการทำคำสั่งภายในวงวนที่สร้างด้วยคำสั่ง while จะต้องทำการตรวจสอบเงื่อนไขก่อนถ้าเงื่อนไขเป็นจริงจึงจะทำคำสั่งในวงวน ดังนั้นหากเงื่อนไขเป็นเท็จตั้งแต่ครั้งแรกกลุ่มคำสั่งภายในวงวนที่สร้างด้วยคำสั่ง while จะไม่มีการทำงานเลย การวนซ้ำด้วยคำสั่ง while สามารถแสดงการทำงานได้ดังผังงานในภาพที่ 5-1

ภาพที่ 5-1 ผังงานการวนซ้ำด้วยคำสั่ง while
ตัวอย่างโปรแกรมการทำงานแบบวนซ้ำด้วยคำสั่ง while ในการพิมพ์ตัวเลขตั้งแต่ 1 – 3 เป็นดังตัวอย่างที่ 5.1  และมีผังงานดังภาพที่ 5-2
ตัวอย่างที่ 5.1 โปรแกรม LoopEx1.java
public class LoopEx1  {
        public static void main(String[] args) {
            int count = 1; 
            while(count <= 3)  {
                System.out.println(“count =+ count);
                count++;
            }
        }
    }

ภาพที่ 5-2 ผังงานของโปรแกรมในตัวอย่างที่ 5.1
ผลการทำงานของโปรแกรม คือ

count = 1

count = 2

count = 3

จากตัวอย่างที่ 5.1 สามารถอธิบายการทำงานของโปรแกรมได้ดังตารางต่อไปนี้

รอบที่ ค่า count while (count<=3) ผลการทำงาน count++
ค่าเริ่มต้น 1 - - -
1 1 TRUE count = 1 2
2 2 TRUE count = 2 3
3 3 TRUE count = 3 4
4 4 FALSE ออกจากวงวน -

การทำงานของโปรแกรมในตัวอย่างที่ 5.1 เงื่อนไขในการวนซ้ำของคำสั่ง while จะมีค่าความจริงเป็นจริง 3 ครั้ง ทำให้คำสั่งภายในวงวนทำงานซ้ำ 3 รอบ ในครั้งที่ 4 ของการตรวจสอบเงื่อนไขเนื่องจากตัวแปร count มีค่าเท่ากับ 4 ทำให้เงื่อนไขเป็นเท็จจึงทำให้สิ้นสุดการทำซ้ำออกจากวงวน

ตัวอย่างที่ 5.2 โปรแกรม LoopEx2.java
import java.util.Scanner;                               
    public class LoopEx2 {
        public static void main(String args[])   {
            System.out.print("Enter a string (q or Q to exit): ");
            int num = 0;
            Scanner sc = new Scanner(System.in);                    
            String stLine = sc.nextLine(); 
            char ch = stLine.charAt(0);     //นำอักขระตัวแรกของ stLine ไปเก็บในตัวแปร ch
            while(ch != 'Q' && ch != 'q')  {
                num++;                                  
                System.out.println("Your string is " + stLine);         
                System.out.print("Enter a string (q or Q to exit): ");  
                stLine = sc.nextLine();                         
                ch = stLine.charAt(0);                      
            }
            System.out.println("Total times = " +   num);
        }
    }

คำสั่ง while เหมาะกับการวนซ้ำที่ไม่จำเป็นต้องกำหนดจำนวนรอบที่แน่นอน ตัวอย่างเช่นโปรแกรมในตัวอย่างที่ 5.2 โปรแกรมจะวนรับข้อความทางแป้นพิมพ์ไปเรื่อย ๆ โดยจะหยุดการวนซ้ำเมื่อผู้ใช้พิมพ์ข้อความที่ขึ้นต้นด้วยตัวอักษร Q หรือ q และนับจำนวนครั้งทั้งหมดที่ผู้ใช้ป้อนข้อความ ดังนั้นจะเห็นได้ว่าจำนวนครั้งของการวนซ้ำในโปรแกรมนี้ขึ้นอยู่ผู้ใช้

ผลลัพธ์ของโปรแกรมเมื่อป้อนข้อมูล 3 ครั้งและป้อน q ในครั้งที่ 4

Enter a string (q or Q to exit): Hello

Your string is Hello

Enter a string (q or Q to exit): Loop

Your string is Loop

Enter a string (q or Q to exit): Java

Your string is Java

Enter a string (q or Q to exit): q

ผลลัพธ์ของโปรแกรมเมื่อป้อน q ในครั้งแรก

Enter a string (q or Q to exit): q

Total times = 0

ผลลัพธ์ของโปรแกรมเมื่อป้อนข้อมูล 1 ครั้งและป้อน q ในครั้งที่ 2

Enter a string (q or Q to exit): test

Your string is test

Enter a string (q or Q to exit): q

Total times = 1

5.2 โครงสร้างทั่วไปอย่างง่ายของโปรแกรมการทำงานแบบวนซ้ำ

หากสังเกตจากโปรแกรมตัวอย่างที่ 5.1 โครงสร้างทั่วไปอย่างง่ายของโปรแกรมการทำงานแบบวนซ้ำ ประกอบด้วย

  1. ก่อนเข้าวงวนให้ประกาศตัวแปรที่ใช้ในการควบคุมวงวน และกำหนดค่าเริ่มต้นให้กับตัวแปรนั้น

  2. สร้างเงื่อนไขให้ในการวนซ้ำ โดยใช้การเปรียบเทียบค่ากับตัวแปรที่ใช้ในการควบคุมวงวน (ถ้าเงื่อนไขเป็นจริงจึงจะทำคำสั่งภายในวงวน แต่ถ้าเงื่อนไขเป็นเท็จจะออกไปทำคำสั่งนอกวงวน)

  3. ส่วนสุดท้ายของวงวนให้ทำการเปลี่ยนแปลงค่าของตัวแปรที่ใช้ในการควบคุมการทำซ้ำ

จากตัวอย่างที่ 5.1 โครงสร้างของการวนซ้ำอย่างง่าย ได้แก่ ส่วนที่ 1 คือ คำสั่ง int count = 1; ในบรรทัดที่ 3 เป็นการกำหนดค่าตัวแปร count ซึ่งใช้ในการควบคุมวงวน ให้มีค่าเริ่มต้นเท่ากับ 1
ส่วนที่ 2 คือ เงื่อนไข (count <= 3) ในบรรทัดที่ 4 เป็นส่วนของเงื่อนไขในในการวนซ้ำโดยใช้ตัวแปร count มาเปรียบเทียบว่าน้อยกว่าหรือเท่ากับ 3 หรือไม่ ส่วนที่ 3 คือ คำสั่ง count++; ในบรรทัดที่ 6 เป็นส่วนของการเปลี่ยนแปลงค่าตัวแปร count เพิ่มอีกหนึ่ง

ตัวอย่างที่ 5.3 โปรแกรม LoopEx3.java
public class LoopEx3 {
        public static void main(String args[]){
            int i = 0;
            while ( i < 10 ) {
                System.out.print(“Hello ”);
                i++;
            }
        }
    }
ผลลัพธ์ของโปรแกรม คือ

Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello

จากตัวอย่างที่ 5.3 เป็นโปรแกรมที่พิมพ์ข้อความ Hello จำนวน 10 ครั้ง ซึ่งมีโครงสร้างการวนซ้ำอย่างง่าย ได้แก่

ส่วนที่ 1 คือ คำสั่ง int i = 0; ในบรรทัดที่ 3 เป็นการกำหนดค่าตัวแปร i ซึ่งใช้ในการควบคุมวงวน ให้มีค่าเริ่มต้นเท่ากับ 0

ส่วนที่ 2 คือ เงื่อนไข (i < 10) ในบรรทัดที่ 4 เป็นส่วนของเงื่อนไขในในการวนซ้ำโดยใช้ตัวแปร i มาเปรียบเทียบว่าน้อยกว่า 10 หรือไม่

ส่วนที่ 3 คือ คำสั่ง i++; ในบรรทัดที่ 6 เป็นส่วนของการเปลี่ยนแปลงค่าตัวแปร i เพิ่มอีกหนึ่ง

โปรแกรมในตัวอย่างที่ 5.3 หากต้องการพิมพ์ข้อความ Hello ซ้ำจำนวน 2000 ครั้ง สามารถทำได้โดยเปลี่ยนเงื่อนไขการวนซ้ำจาก i < 10 เป็น i < 2000 แทน

5.3 คำสั่ง DO-WHILE

คำสั่ง do-while เป็นคำสั่งที่การควบคุมการทำงานแบบวนซ้ำโดยจะดำเนินการกลุ่มคำสั่งในวงวนแบบ do-while ก่อนแล้วทำการตรวจสอบเงื่อนไขการวนซ้ำในภายหลัง หากเงื่อนไขเป็นจริงจะวนซ้ำกลุ่มคำสั่งในวงวน do-while อีกครั้ง ทำเช่นนี้จนกระทั้งเงื่อนไขเป็นเท็จจึงจะหยุดการวนซ้ำ คำสั่ง do-while มีรูปแบบไวยากรณ์ดังนี้

    do {
      กลุ่มคำสั่งที่ต้องการทำซ้ำ;
    } while (เงื่อนไขการวนซ้ำ);

หลังการทำกลุ่มคำสั่งภายในวงวนที่สร้างด้วยคำสั่ง do-while แล้วจึงทำการตรวจสอบเงื่อนไขโดยในขณะที่เงื่อนไขเป็นจริงกลุ่มคำสั่งในวงวนจะถูกประมวลผลซ้ำอีก ดังนั้นคำสั่งภายในวงวนจะต้องถูกประมวลผลแน่นอนอย่างน้อย 1 ครั้งเสมอ ข้อสังเกตจากไวยากรณ์ของคำสั่ง do-while หลังวงเล็บของเงื่อนไขจะต้องใส่เครื่องหมายอัฒภาค (;) ด้วย การวนซ้ำด้วยคำสั่ง do-while แสดงได้ดังผังงานในภาพที่ 5-3

ภาพที่ 5-3 ผังงานการวนซ้ำด้วยคำสั่ง do-while

ตัวอย่างโปรแกรมการทำงานแบบวนซ้ำด้วยคำสั่ง do-while ในการพิมพ์ตัวเลขตั้งแต่ 1 – 3 เป็นดังตัวอย่างที่ 5.4 และมีผังงานดังภาพที่ 5-4

ตัวอย่างที่ 5.4 โปรแกรม LoopEx4.java
public class LoopEx4  {
        public static void main(String[] args) {
            int count = 1; 
            do {
                System.out.println(“count =+ count);
                count++;
            } while(count <= 3) ; 
        }
    }

ภาพที่ 5-4 ผังงานของโปรแกรมในตัวอย่างที่ 5.4
ผลการทำงานของโปรแกรม คือ

count = 1

count = 2

count = 3

จากตัวอย่างที่ 5.4 สามารถอธิบายการทำงานของโปรแกรมได้ดังตารางต่อไปนี้

ตารางที่ 5.2 การทำงานของโปรแกรมในตัวอย่างที่ 5.4

รอบที่ ค่า count ผลการทำงาน count++ while (count<=3)
ค่าเริ่มต้น 1 - - -
1 1 count = 1 2 TRUE
2 2 count = 2 3 TRUE
3 3 count = 3 4 FALSE
- ออกจากวงวน

การทำงานของโปรแกรมในตัวอย่างที่ 5.4 จะทำให้คำสั่งภายในวงวนซ้ำ 3 รอบ การตรวจสอบเงื่อนไขในการวนซ้ำของคำสั่ง do-while จะมีค่าความจริงเป็นจริง 2 ครั้ง ในครั้งที่ 3 ของการตรวจสอบเงื่อนไขเนื่องจากตัวแปร count มีค่าเท่ากับ 4 เงื่อนไขเป็นเท็จจึงทำให้สิ้นสุดการทำซ้ำและออกจากวงวน

ตัวอย่างที่ 5.4 โปรแกรม LoopEx4.java
public class LoopEx4 {
        public static void main(String args[]){
            int i = 0;
            do {
                System.out.print(“Hello ”);
                i++; 
            } while ( i < 10 );
        }
    }
ผลลัพธ์ของโปรแกรม คือ

Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello

จากตัวอย่างที่ 5.4 เป็นโปรแกรมที่พิมพ์ข้อความ Hello จำนวน 10 ครั้ง โดยใช้คำสั่ง do-while

5.4 คำสั่ง FOR

จากโครงสร้างการทำซ้ำทั่วไปซึ่งประกอบไปด้วย 3 ส่วนดังได้กล่าวไปแล้วในหัวข้อที่ 5.2 นั้น หากต้องการเขียนโปรแกรมที่มีการวนซ้ำซึ่งสามารถระบุจำนวนรอบได้อย่างชัดเจน เราสามารถเขียนโปรแกรมให้ง่ายขึ้นได้โดยใช้คำสั่ง for ซึ่งมีรูปแบบไวยากรณ์ ดังนี้

for (การดำเนินการก่อนการวนซ้ำ; เงื่อนไขการวนซ้ำ; การดำเนินการหลังจบการวนซ้ำในแต่ละรอบ) {
        กลุ่มคำสั่งที่ต้องการทำซ้ำ;
} 

บรรทัดแรกหลังคำว่า for จะประกอบไปด้วย 3 ส่วนคั่นด้วยเครื่องหมายอัฒภาค (;) โดยส่วนที่หนึ่งคือสิ่งที่จะดำเนินการก่อนการทำซ้ำในคำสั่ง for ซึ่งส่วนนี้จะทำครั้งแรกเพียงครั้งเดียวเป็นการกำหนดค่าเริ่มต้นให้กับตัวแปรที่ใช้ในการควบคุมการวนซ้ำ ส่วนที่ 2 คือเงื่อนไขการวนซ้ำ โดยก่อนการทำงานกลุ่มคำสั่งในวงวนจะต้องมีการตรวจสอบเงื่อนไขก่อนถ้าเงื่อนไขเป็นจริงจึงจะทำคำสั่งในวงวน แต่ถ้าเงื่อนไขเป็นเท็จจะยุติการทำซ้ำ และส่วนที่ 3 เป็นส่วนที่จะดำเนินการหลังจากสิ้นสุดการการวนซ้ำในแต่ละรอบ เป็นการเปลี่ยนแปลงค่าตัวแปรที่ใช้ในการควบคุมการทำซ้ำด้วยคำสั่ง for ดังนั้นการทำซ้ำด้วยคำสั่ง for เป็นดังผังงานในภาพที่ 5-5

ภาพที่ 5-5 ผังงานการวนซ้ำด้วยคำสั่ง for

ตัวอย่างโปรแกรมการทำงานแบบวนซ้ำด้วยคำสั่ง for ในการพิมพ์ตัวเลขตั้งแต่ 1 – 3 เป็นดังตัวอย่างที่ 5.5 และมีผังงานดังภาพที่ 5-6

ตัวอย่างที่ 5.5 โปรแกรม LoopEx5.java
public class LoopEx5  {
        public static void main(String[] args) {
            for(int i = 1; i <= 3; i++)  {
                System.out.println(“count =+ i);
            }
        }
    }
ผลลัพธ์ของโปรแกรม คือ

count = 1

count = 2

count = 3

ภาพที่ 5-6 ผังงานของโปรแกรมในตัวอย่างที่ 5.5

ตารางที่ 5.3 การทำงานของโปรแกรมในตัวอย่างที่ 5.5

รอบที่ ค่า i while (i<=3) ผลการทำงาน i++
ค่าเริ่มต้น 1 - - -
1 1 TRUE count = 1 2
2 2 TRUE count = 2 3
3 3 TRUE count = 3 4
4 4 FALSE ออกจากวงวน -

จากผังงานในภาพที่ 5-6 และการทำงานของโปรแกรมในตารางที่ 5.3 จะเห็นได้ว่าการทำงานจะเหมือนกับโปรแกรมในตัวอย่างที่ 5-1 ซึ่งใช้คำสั่ง while แต่การวนซ้ำด้วยคำสั่ง for จะมีการแบ่งโครงสร้างการทำซ้ำออกเป็น 3 ส่วนอย่างชัดเจนจึงเหมาะกับการนำไปใช้ในการทำซ้ำที่มีการกำหนดจำนวนรอบที่จะทำซ้ำได้อย่างชัดเจน

5.5 วงวนแบบไม่รู้จบ

วงวนไม่รู้จบ (infinite loop) คือการที่กลุ่มคำสั่งหนึ่งทำซ้ำไปเรื่อย ๆ ไม่รู้จบ ตัวอย่างของโปรแกรมที่เกิดวงวนไม่รู้จบ เช่น

ตัวอย่างที่ 5.6 LoopEx6
    public class LoopEx6 {
        public static void main(String args[]){
            while(true) {
                System.out.print(“Hello ”);
            } 
        }
    }

จากตัวอย่างที่ 5.6 เงื่อนไขของคำสั่ง while เป็นจริงไปตลอดทำให้เกิดการวนพิมพ์ Hello ซ้ำไม่รู้จบ

ตัวอย่างที่ 5.7 LoopEx7
    public class LoopEx7 {
        public static void main(String args[]){
            for(int i = 1; i >=1; i++)
                System.out.print(“Hello ”);
        }
    }

จากตัวอย่างที่ 5.7 ตัวแปร i ที่ใช้ในการควบคุมการวนซ้ำในโปรแกรมนี้มีค่าเริ่มต้นเป็นหนึ่งและแต่ละรอบค่าของตัวแปร i จะเพิ่มขึ้นทีละหนึ่ง จึงทำให้ค่า i มากกว่าหรือเท่ากับ 1 ตลอดไป ทำให้เงื่อนไขเป็นจริงตลอดไป เกิดการวนพิมพ์ Hello ซ้ำไม่รู้จบ

ตัวอย่างที่ 5.8 LoopEx8.java
    public class LoopEx8 {
        public static void main(String args[]){
            for(  ;   ;   )
                System.out.print(“Hello ”);
        }
    }

จากตัวอย่างที่ 5.8 โปรแกรมไม่มีข้อผิดพลาดทางไวยากรณ์ แต่จะเกิดวงวนไม่รู้จบ พิมพ์ Hello ไปเรื่อย ๆ

5.6 ข้อผิดพลาดของโปรแกรม (ข้อผิดพลาดทางไวยากรณ์, ข้อผิดพลาดระหว่างการทำงาน และข้อผิดพลาดทางตรรกะ)

การพัฒนาโปรแกรมย่อมจะเกิดข้อผิดพลาดขึ้นได้ ข้อผิดพลาดของโปรแกรมแบ่งออกเป็น 3 ประเภทคือ ข้อผิดพลาดทางไวยากรณ์ (syntax error), ข้อผิดพลาดระหว่างการทำงาน (runtime error) และข้อผิดพลาดทางตรรกะ (logic error)

ข้อผิดพลาดทางไวยากรณ์ คือข้อผิดพลาดที่เกิดจากการเขียนโปรแกรมไม่ตรงตามข้อกำหนดหรือไวยากรณ์ของภาษา สามารถตรวจพบได้ด้วยตัวแปรโปรแกรมในระหว่างการแปลโปรแกรม เช่น ไม่ได้ใส่เครื่องหมายอัฒภาค (;) หลังจบคำสั่ง เป็นต้น

ข้อผิดพลาดระหว่างการทำงาน คือข้อผิดพลาดที่เกิดในระหว่างการทำงานของโปรแกรมซึ่งจะตรวจสอบได้ยากกว่าข้อผิดพลาดทางไวยากรณ์ เช่น การหารด้วยศูนย์, ชนิดข้อมูลไม่ถูกต้อง เป็นต้น เมื่อเกิดข้อผิดพลาดขึ้นโปรแกรมจะหยุดทำงาน

ข้อผิดพลาดทางตรรกะ คือข้อผิดพลาดที่เกิดจากผลลัพธ์ของโปรแกรมไม่ตรงตามที่ต้องการซึ่งอาจเกิดได้จากหลายสาเหตุ เช่น เกิดจากการวิเคราะห์และออกแบบโปรแกรมที่ไม่ถูกต้องเนื่องจากไม่เข้าใจปัญหาหรือตีความปัญหาผิดหรืออาจเกิดจากการเขียนโปรแกรมผิดขั้นตอน ข้อผิดพลาดทางตรรกะเป็นข้อผิดพลาดที่แก้ไขได้ยากที่สุด ตัวอย่างเช่นวงวนไม่รู้จบที่เกิดขึ้นในตัวอย่างที่ 5.8 หากวัตถุประสงค์ของโปรแกรมคือต้องการพิมพ์ Hello ซ้ำ 10 ครั้ง ดังนั้นข้อผิดพลาดนี้จึงเกิดจากการกำหนดเงื่อนไขของการวนซ้ำไม่ถูกต้อง ซึ่งต้องแก้ไขด้วยการเปลี่ยนเงื่อนไขของ for เป็น i <=10 เป็นต้น

5.7 การทดสอบโปรแกรม

โปรแกรมที่ผ่านการแปลโปรแกรมแล้วเมื่อนำโปรแกรมนั้นไปใช้งานอาจได้ผลลัพธ์ที่ไม่ถูกต้องตามที่ต้องการอันเนื่องมาจากการเกิดข้อผิดพลาดขึ้นได้ ดังนั้นจึงควรต้องทำการทดสอบความถูกต้องของโปรแกรมโดยการทดสอบมี 2 รูปแบบ คือ การทดสอบแบบกล่องดำ (black-box testing) และการทดสอบแบบกล่องขาว (white-box testing)

  1. การทดสอบแบบกล่องดำ คือการทดสอบโดยโปรแกรมที่ถูกทดสอบจะถูกมองในรูปของกล่องดำ เป้าหมายของการทดสอบเพื่อดูผลลัพธ์ของโปรแกรมว่ามีความถูกต้องตรงตามความต้องการหรือไม่โดยไม่สนใจหรือพิจารณาโครงสร้างของโปรแกรม ดังภาพที่ 5-13 การทดสอบจะใช้ค่าข้อมูลนำเข้าและข้อมูลส่งออกมาพิจารณาเทียบกับผลลัพธ์ที่คาดหวัง

ภาพที่ 5-13 การทดสอบแบบกล่องดำ

การทดสอบแบบนี้ทำขึ้นเพื่อทำให้แน่ใจว่าโปรแกรมที่พัฒนาขึ้นเป็นไปตามความต้องการที่กำหนดไว้อย่างแท้จริง โดยในการทดสอบจะต้องมีการจัดเตรียมกรณีทดสอบ (test case) เพื่อระบุข้อมูลทดสอบและผลลัพธ์ที่คาดหวัง แล้วทำการทดสอบให้โปรแกรมทำงานโดยใส่ข้อมูลนำเข้าที่กำหนดแล้วเมื่อโปรแกรมทำงานและให้ข้อมูลนำออกหรือผลลัพธ์จริงให้นำไปเปรียบเทียบว่าตรงกับผลลัพธ์ที่คาดหวังซึ่งได้กำหนดไว้ในกรณีทดสอบนั้น ๆ หรือไม่ ในส่วนของการกำหนดข้อมูลทดสอบที่จะเป็นข้อมูลนำเข้ามีหลายวิธีการ เช่น การใส่ข้อมูลที่ถูกต้องเพื่อดูผลลัพธ์ว่าเป็นไปตามที่คาดหวังหรือไม่ การใช้ขอบเขตของข้อมูลและความถูกต้องของข้อมูลเป็นการทดสอบ การใช้ความสมเหตุสมผลของข้อมูล ประเภทข้อมูลแบบต่าง ๆ ที่เป็นตัวเลขและตัวอักษร ข้อกำหนดของรูปแบบข้อมูล เป็นต้น

  1. การทดสอบแบบกล่องขาวหรือกล่องแก้ว (glass-box tesing) คือการทดสอบโปรแกรมโดยมีการใช้โครงสร้างการควบคุมของโปรแกรมมาช่วยในการออกแบบการทดสอบ ดังนั้นในการทดสอบแบบนี้จำเป็นจะต้องรู้และเข้าใจโครงสร้างการทำงานของโปรแกรมที่จะทดสอบด้วย โครงสร้างการทำงานของโปรแกรม ได้แก่ การทำงานตามโครงสร้างแบบลำดับ การทำงานตามโครงสร้างแบบเลือกทำ และการทำงานตามโครงสร้างแบบวนซ้ำ เป็นการทดสอบคำสั่งต่าง ๆ ในโปรแกรม ดังนั้นในการออกแบบกรณีทดสอบจะต้องดำเนินการทดสอบทุกเส้นทางการทำงานของแต่ละส่วนของโปรแกรม ทดสอบการจัดสินใจเชิงตรรกะในทุกกรณี และทดสอบโครงสร้างข้อมูลทั้งหมดที่อยู่ภายในโปรแกรม

5.8 การแก้จุดบกพร่อง

ข้อผิดพลาดทางตรรกะเรียกว่า จุดบกพร่องหรือบัก (bug) กระบวนการในการหาและแก้ไขข้อผิดพลาดเรียกว่าการแก้จุดบกพร่องหรือการดีบัก (debugging) แนวทางทั่วไปในการแก้จุดบกพร่องสามารถใช้หลายวิธีร่วมกันเพื่อทำให้ส่วนของโปรแกรมที่เกิดจุดบกพร่องแคบลงซึ่งจะทำให้หาจุดบกพร่องง่ายขึ้น เช่น ใช้การไล่โปรแกรมหรือการอ่านโปรแกรม หรือสามารถเพิ่มคำสั่งพิมพ์เพื่อแสดงค่าของตัวแปรหรือการประมวลผลการทำงานในแต่ละขั้นตอนของโปรแกรม เป็นต้น แนวทางเหล่านี้สามารถใช้กับโปรแกรมที่มีขนาดเล็กและไม่ซับซ้อนมากนัก

หากเป็นโปรแกรมขนาดใหญ่ที่มีความซับซ้อนมากจะต้องใช้เครื่องมือหรือโปรแกรมตรวจแก้จุดบกพร่องที่มีอยู่ในซอฟต์แวร์ช่วยในการพัฒนาโปรแกรมหรือไอดีอี ตัวอย่างเช่น โปรแกรม Jcreator Pro, โปรแกรม Eclipse, โปรแกรม Netbean เป็นต้น การใช้โปรแกรมตัวแก้จุดบกพร่อง (debugger) ที่มีในไอดีอีเหล่านี้จะมีลักษณะเป็นแบบกราฟฟิกในการหาข้อผิดพลาดของโปรแกรมจะช่วยให้สามารถหาจุดบกพร่องของโปรแกรมที่เขียนขึ้นได้ง่ายและรวดเร็วกว่าการคาดเดาเอง หรือการไล่และอ่านโปรแกรม

ในส่วนต่อไปนี้ขอยกตัวอย่างวิธีการใช้โปรแกรม JCreator Pro เพื่อตรวจแก้จุดบกพร่องของโปรแกรม ดังนี้

โปรแกรม JCreator Pro มีวิธีการในการดีบักโปรแกรมโดยการไปที่เมนู Run เลือก Debug Project (หรือกดปุ่ม Ctrl+F5 หรือคลิกเลือกไอคอน ) ในกรณีที่มีไฟล์เดียวสามารถเลือกเมนู Debug File ดังภาพที่ 5-7

ภาพที่ 5-7 เมนู Run และเมนูย่อย Debug File

จากนั้นจะปรากฏกล่องข้อความความโต้ตอบที่ถามว่าต้องการจะเริ่มทำการดีบักที่เมท็อดหลักหรือ เมท็อด main ใช่หรือไม่ ให้คลิกปุ่ม Yes กรณีที่ต้องการเริ่มต้นตรวจสอบการทำงานที่เมธอด main แต่หากต้องการเริ่มตรวจสอบที่ส่วนอื่นให้ตอบ No ดังภาพที่ 5-8

ภาพที่ 5-8 กล่องข้อความความโต้ตอบให้ระบุว่าต้องการจะเริ่มทำการดีบักที่เมท็อด main หรือไม่

จากนั้นให้กดปุ่ม F10 เพื่อดูการทำงานทีละคำสั่งตามลำดับขั้นตอนการทำงานของโปรแกรม แต่หากมีการเรียกใช้โปรแกรมย่อยหรือเมท็อดต้อง กดปุ่ม F11 เพื่อดูการทำงานแต่ละขั้นตอนย่อยในเมท็อดนั้น หากกดปุ่ม F10 จะแสดงเฉพาะผลลัพธ์จากการทำงานของเมท็อดนั้นเท่านั้น หากต้องการหยุดการดีบักก่อนที่โปรแกรมจะทำงานเสร็จสามารถทำได้โดยการกดปุ่ม Ctrl+B หรือไอคอน ตัวอย่างการดีบักโปรแกรมจะเห็นได้ว่าจะมีลูกศรชี้ว่าขณะนี้กำลังทำงานอยู่ที่บรรทัดใด ดังภาพที่ 5-9 และสามารถตรวจดูได้ด้วยว่าค่าที่เก็บอยู่ในตัวแปรแต่ละตัวคืออะไร รวมถึงการทำงานในขั้นตอนนั้น ๆ

ภาพที่ 5-9 ตัวอย่างหน้าจอการดีบักโปรแกรม

ตัวอย่างการแสดงค่าที่เก็บในตัวแปรในขณะที่ทำคำสั่งนั้น โดยจะแสดงค่าตัวแปรในแท็บ Locals ดังภาพที่ 5-10

ภาพที่ 5-10 การแสดงค่าตัวแปรในแท็บ Locals

ตัวอย่างการแสดงหน้าจอผลการทำงานของโปรแกรมในแท็บ Debug Output

ภาพที่ 5-11 การแสดงผลการทำงานของโปรแกรมในแท็บ Debug Output

นอกจากนี้เราสามารถกำหนดจุด break point โดยการคลิกที่เลขบรรทัดในบรรทัดคำสั่งที่ต้องการให้โปรแกรมหยุดเพื่อตรวจสอบค่าตัวแปรต่าง ๆ และการกำหนดจุด break point สามารถทำได้หลายจุด ดังภาพที่ 5-12

ภาพที่ 5-12 การกำหนดจุด break point

จากภาพที่ 5-12 โปรแกรม JCreator Pro จะหยุดการทำงานอยู่ที่ตำแหน่งของ break point ที่ได้กำหนดไว้ เมื่อถึงตำแหน่งของ break point แล้ว โปรแกรม Jcreator Pro จะแสดงข้อมูลเพื่อให้สามารถตรวจสอบค่าของตัวแปรต่าง ๆ และผลลัพการทำงานได้

5.9 การวนซ้ำแบบหลายชั้น

โปรแกรมที่ประกอบไปด้วยคำสั่งที่ใช้วนซ้ำในการทำงานซ้อนกันสามารถเป็นคำสั่ง while, do-while, หรือ for แบบใดซ้อนกันก็ได้ การทำงานของโปรแกรมจะเริ่มด้วยการทดสอบเงื่อนไขของวงวนภายนอกก่อนเมื่อเงื่อนไขเป็นจริงจึงเข้าไปทำงานกลุ่มคำสั่งภายในวงวนภายนอก เมื่อพบวงวนภายในจะทำงานจนครบตามจำนวนรอบของวงวนภายใน แล้วทำคำสั่งต่อไปของวงวนภายนอกจนครบทุกคำสั่ง จากนั้นจึงจะกลับไปตรวจสอบเงื่อนไขของวงวนภายนอกอีกครั้งหากเงื่อนไขเป็นจริงจะทำซ้ำตามขั้นตอนที่กล่าวมาซ้ำอีก

ตัวอย่างที่ 5.9 LoopEx9.java

ผลการทำงานของโปรแกรม คือ

****

****

end

ตัวอย่างที่ 5.9 เป็นตัวอย่างของโปรแกรมที่มีการวนซ้ำแบบหลายชั้นซึ่งในตัวอย่างนี้เป็นวงวน for ซ้อนอยู่ในวงวน for การทำงานของโปรแกรมอธิบายได้ดังตารางที่ 5.4

ตารางที่ 5.4 การทำงานของโปรแกรมในตัวอย่างที่ 5.9

row
รอบที่
column
รอบที่
row for
row<height
column for
column<width
ผลการทำงาน column++ row++
R1 C1 0 TRUE 0 TRUE * 1 -
C2 1 TRUE * 2 -
C3 2 TRUE * 3 -
C4 3 TRUE * 4 -
C5 4 FALSE - - 1
R2 C1 1 TRUE 0 TRUE * 1 -
C2 1 TRUE * 2 -
C3 2 TRUE * 3 -
C4 3 TRUE * 4 -
C5 4 FALSE - - 2
R3 - 2 FALSE - - - - -
End

จากโปรแกรมในตัวอย่างที่ 5.9 วงวนภายนอกจะทำซ้ำ 2 รอบ และวงวนภายในจะทำซ้ำ 4 รอบเพื่อพิมพ์ * ดังนั้นผลการทำงานของวงวนภายในคือพิมพ์ * จำนวน 4 ครั้ง แต่เนื่องจากวงวนภายนอกมาควบคุมให้วงวนภายในต้องซ้ำตั้งแต่ต้นทั้งหมด 2 ครั้ง ผลการทำงานจึงมีการพิมพ์ * ทั้งหมด 8 ครั้งใน 2 บรรทัด ผังงานของโปรแกรมเป็นดังภาพที่ 5-7

ภาพที่ 5-6 ผังงานของโปรแกรมในตัวอย่างที่ 5.9

5.10 คำสั่ง BREAK และ CONTINUE

คำสั่ง break และ continue เป็นคำสั่งที่นำมาใช้ร่วมกับโปรแกรมที่มีการทำงานแบบเลือกทำ และโปรแกรมแบบวนซ้ำ

คำสั่ง break มีการทำงานคือจะทำให้หยุดการทำซ้ำในวงวนทันที (สิ้นสุดการทำงานของวงวน) มักใช้ร่วมกับคำสั่ง if การทำงานของคำสั่ง break เป็นดังผังงานต่อไปนี้

ภาพที่ 5-6 ผังงานของคำสั่ง break

คำสั่ง continue มีการทำงานคือจะหยุดการทำงานที่จุดนั้นแล้วย้อนกลับไปเริ่มต้นการทำงานที่ต้นวงวนใหม่ในรอบถัดไปทันที โดยไม่สนใจว่ายังมีคำสั่งในวงวนนั้นอีกหรือไม่ (สิ้นสุดการทำงานในรอบนั้นแล้วขึ้นรอบใหม่) มักใช้ร่วมกับคำสั่ง if การทำงานของคำสั่ง continue เป็นดังผังงานต่อไปนี้

ภาพที่ 5-7 ผังงานของคำสั่ง continue
ตัวอย่างที่ 5.10 LoopEx10.java

ผลการทำงานของโปรแกรม คือ

Number 1

Number 3

Number 4

Number 5

Number 7

Number 8

Number 9

End of Process

จากโปรแกรมในตัวอย่างที่ 5.10 มีการวนซ้ำโดยใช้คำสั่ง while ซึ่งเงื่อนไขเป็นจริงตลอดไป แต่การวนซ้ำรอบที่ num = 2 กับรอบที่ num = 6 เงื่อนไขของคำสั่ง if เป็นจริงบรรทัดที่ 10 ทำให้โปรแกรมทำคำสั่ง continue ในบรรทัดที่ 11 โปรแกรมจึงขึ้นรอบใหม่โดยข้ามคำสั่งพิมพ์ค่า num ไปทำให้ในรอบที่ num = 2 กับรอบที่ num = 6 ผลการทำงานของโปรแกรมไม่มีการพิมพ์ค่า num และในส่วนของเงื่อนไข if ในบรรทัดที่ 6 เป็นจริงเมื่อ num = 10 จึงไปทำคำสั่ง break แล้วจึงหยุดหรือสิ้นสุดการทำซ้ำของวงวนนี้

ในกรณีที่มีวงวนซ้ำกันหลายชั้นคำสั่ง break และคำสั่ง continue จะดำเนินการกับวงวนที่อยู่ในสุดที่คำสั่ง break และคำสั่ง continue นั้นสังกัดอยู่ ถ้าต้องการให้โปรแกรมออกจากวงวนที่อยู่เหนือกว่าวงวนที่อยู่ในสุด จะต้องใช้คำสั่ง break และคำสั่ง continue แบบมี label โดยการกำหนด label ให้กับวงวนเปรียบเสมือนการตั้งชื่อให้กับวงวนจึงทำให้สามารถระบุได้ว่าต้องการให้คำสั่ง break และ continue ดำเนินการกับวงวนใด ดังโปรแกรมในตัวอย่างที่ 5.11 ไม่มีการกำหนด label และโปรแกรมในตัวอย่างที่ 5.12 มีการกำหนด label และใช้งานคำสั่ง continue ร่วมกับ label

ตัวอย่างที่ 5.11 LoopEx11.java

ตัวอย่างที่ 5.11 LoopEx11.java

Begin loop #1

Number 1

Number 2

Number 3

End loop #1

Begin loop #2

Number 1

Number 3

End loop #2

Begin loop #3

Number 1

Number 2

Number 3

End loop #3

จากโปรแกรมในตัวอย่างที่ 5.11 คำสั่ง continue จะไปขึ้นรอบใหม่ของวงวน while ( j <= 2 ) ซึ่งเป็นวงวนในสุดที่คำสั่ง continue นี้สังกัดอยู่ ดังนั้นในรอบที่ค่า i = 2 และ j = 2 เงื่อนไขของ if เป็นจริง โปรแกรมจึงทำคำสั่ง continue ในบรรทัดที่ 10 แล้วกลับขึ้นไปทำงานที่ต้นวงวนของ while ทำให้ไม่ได้ทำคำสั่งพิมพ์ค่า num ผลลัพธ์ของโปรแกรมจึงไม่มีการพิมพ์ค่า num ในรอบที่ i = 2 และ j = 2

ตัวอย่างที่ 5.12 LoopEx12.java

ผลการทำงานของโปรแกรม คือ

Begin loop #1

Number 1

Number 2

Number 3

End loop #1

Begin loop #2

Number 1

Begin loop #3

Number 1

Number 2

Number 3

End loop #3

จากโปรแกรมในตัวอย่างที่ 5.12 คำสั่ง continue จะไปขึ้นรอบใหม่ของวงวน for(i=1; i<=3; i++) ซึ่งเป็นวงวนที่มีชื่อ label คือ outerloop ตามที่กำหนดในบรรทัดที่ 12 เนื่องจากในรอบที่ค่า i = 2 และ j = 2 เงื่อนไขของ if เป็นจริง โปรแกรมจึงทำคำสั่ง continue ในบรรทัดที่ 12 แล้วกลับขึ้นไปทำงานที่ต้นวงวนของ for ทำให้ไม่ได้ทำคำสั่งพิมพ์ค่า num ผลลัพธ์ของโปรแกรมจึงไม่มีการพิมพ์ค่า num ในรอบที่ num = 2 และ num = 3 เพราะไปขึ้นรอบใหม่ที่ให้ i = 3

ตัวอย่างโปรแกรมเกมทายตัวเลขเป็นดังตัวอย่างที่ 5.13  โปรแกรมนี้จะทำการสุ่มตัวเลขในช่วง 1 – 100 ขึ้นมา   ผู้เล่นจะต้องทำการทายตัวเลขโดยต้องทายให้ถูกภายใน 7 ครั้ง  และหากต้องการออกจากโปรแกรมให้ผู้เล่นป้อนตัวเลข 999 โดยสามารถออกจากโปรแกรมได้โดยไม่ต้องรอให้เล่นจนจบเกมก่อนก็ได้   หากยังไม่ออกจากเกม เมื่อทายครบ 7 ครั้งแล้วโปรแกรมจะเริ่มต้นเกมใหม่ไปเรื่อย ๆ
ตัวอย่างที่ 5.13 โปรแกรม GuessWhatNumber.java
import java.util.Scanner;
    public class GuessWhatNumber{
        public static void main (String[] args) {
            Scanner input = new Scanner(System.in);
            int counter = 1;
            int guessNo = 0;
            int num = 0;
            System.out.println("Guess a number between 1 and 100.");
            System.out.println("You have 7 times to try!");
            while (guessNo!=999) {
                    if (counter == 1) {
                        System.out.println("Enter 999 to quit the game.\n");
                        num = (int)(Math.random()*100)+1;  //random a number (1-100)
                    }   
                    System.out.print("Time " + counter + "\nEnter a number (1-100): ");
                    guessNo = input.nextInt();
                    if (guessNo==999)
                        break;          //Quit game
                    if (guessNo==num && counter<=7) {   //Condition to win
                        System.out.println("\nIt is correct. Congratulations!");
                        counter = 1;    //Start new game
                        continue;
                    }   
                    else if (guessNo>num)   //Give hint for the wrong guess
                        System.out.println("Hint: <" + guessNo);
                    else 
                        System.out.println("Hint: >" + guessNo);
            
                    if (counter==7) {           //Check for time out
                        System.out.println("\nSorry. My number is " + num +".");
                        counter = 1;            //Start new game
                        continue;
                    }
                    counter++;
            } //End while  
        }
    }

5.11 แบบฝึกหัด

  1. ให้ระบุผลลัพธ์ของโปรแกรมต่อไปนี้
    for (int i = initial; i < boundary; i++) {
        System.out.println(“Hello”);
    }
1.1 เมื่อ initial = 0, boundary = 10

1.2 เมื่อ initial = 10, boundary = 10

1.3 เมื่อ initial = 5, boundary = 4
  1. ให้ระบุผลลัพธ์ของโปรแกรมต่อไปนี้
    for (int i = initial; i > boundary; i--) {
        System.out.println(“Hello”);
    }
2.1  เมื่อ initial = 20, boundary = 10

2.2  เมื่อ initial = 10, boundary = 10

2.3  เมื่อ initial = 5, boundary = 4
  1. ให้ระบุผลลัพธ์ของโปรแกรมต่อไปนี้
    for (int i = initial; i <= boundary; i+=2) {
        System.out.println(“Hello”);
    }
3.1  เมื่อ initial = 0, boundary = 10

3.2  เมื่อ initial = 10, boundary = 10

3.3  เมื่อ initial = 2, boundary = 5
  1. ให้ระบุผลลัพธ์ของโปรแกรมต่อไปนี้
    for (int i = initial; i != boundary; i*=2) {
        System.out.println(“Hello”);
    }
4.1  เมื่อ initial = 0, boundary = 16

4.2  เมื่อ initial = 3, boundary = 24

4.3  เมื่อ initial = 1, boundary = 8
  1. ให้ระบุผลลัพธ์ของโปรแกรมต่อไปนี้
    for (int i = initial; i < boundary; i++) ;
        System.out.println(“Hello”);
5.1 เมื่อ initial = 0, boundary = 16

5.2 เมื่อ initial = 3, boundary = 24
  1. ให้หาค่า sum หลังจากทำคำสั่งต่อไปนี้
    int k = 0, sum = 0;
    while (sum < 9) {
      sum = ++k + sum;
    }
  1. ให้หาค่า prod หลังจากทำคำสั่งต่อไปนี้
    long prod = 2;
    do {
        prod = prod*prod;
    } while (prod >= 16);
  1. ให้หาค่า sum หลังจากทำคำสั่งต่อไปนี้
    int sum = 0;
    for(int k=0;k<4;k++)  {
        sum = sum + k*k;
    }
  1. ให้ระบุผลลัพธ์ของโปรแกรมต่อไปนี้
    int height = 5;
    for(int row = 0; row<height; row++)  {
        for(int column = row;column < height; column++)  {
            System.out.print(" *");
        }
        System.out.println();
    }  
  1. ให้ระบุผลลัพธ์ของโปรแกรมต่อไปนี้
    int j = 10, k = 1, r = 0;
    do {
        if(j--<k) {
            break;
        }
        r++;
    } while(k++ < 6);
    System.out.println("j = "+j+ " k = "+k+" r = "+r);
  
  1. ให้ระบุผลลัพธ์ของโปรแกรมต่อไปนี้
    int i = 20;
    do {
        i -= 5;
        System.out.println(i);
    }while(i>0);
  1. ให้ระบุผลลัพธ์ของโปรแกรมต่อไปนี้
    for (int x=0; x<10; x++) {               
        if (x == 5)
    break;
else
    System.out.print(" " + x);
    }
  1. ให้ระบุผลลัพธ์ของโปรแกรมต่อไปนี้
    for (int x = 0; x < 10; x++) {
        if (x == 5)
        continue;
    else
         System.out.print(" " + x);
    }
  1. ให้ระบุผลลัพธ์ของโปรแกรมต่อไปนี้
    for(int i=0,j=5,k=-5;j>=0;i++,j--,k++)  {
        System.out.println(i+ "\t" + j + "\t" +k);
    }
  1. ให้ระบุผลลัพธ์ของโปรแกรมต่อไปนี้
    for(int i = 1; i <= 5; i++) {
        for(int j = 1; j <= i; j++)
            System.out.print(j + "\t");                     
            System.out.println();
    }
  1. ให้เขียนโปรแกรมจากโจทย์ในตัวอย่างที่ 1.5 ในบทที่ 1 เพื่อพิจารณาหาค่าธรรมเนียมการศึกษาในภาคฤดูร้อนของมหาวิทยาลัยแห่งหนึ่งซึ่งเรียกเก็บค่าธรรมเนียมการศึกษาในภาคฤดูร้อน ในอัตราดังนี้

    1. ลงทะเบียนตั้งแต่ 1 – 3 หน่วยกิต ภาคการศึกษาละ 3,000 บาท

    2. ลงทะเบียนตั้งแต่ 4 – 6 หน่วยกิต ภาคการศึกษาละ 4,500 บาท

    3. ลงทะเบียนตั้งแต่ 7 – 9 หน่วยกิต ภาคการศึกษาละ 6,000 บาท

ให้นำจำนวนหน่วยกิตมาหาว่านักศึกษาต้องจ่ายค่าธรรมเนียมการศึกษาในภาคฤดูร้อนเท่าใด แล้วแสดงผลลัพธ์ออกทางจอภาพ นอกจากนี้แล้วมหาวิทยาลัยไม่อนุญาตให้นักศึกษาลงทะเบียนเกิน 9 หน่วยกิตโดยเด็ดขาด ดังนั้นหากจำนวนหน่วยกิตเกินให้กลับไปรับค่าจำนวนหน่วยกิตใหม่อีกครั้ง

  1. จากโจทย์ในแบบฝึกหัดข้อที่ 5 ให้เขียนโปรแกรมเพิ่มเติมเพื่อแสดงตารางการผ่อนชำระหนี้ ตัวอย่างผลลัพธ์ของโปรแกรมเมื่อป้อนจำนวนเงินกู้ 10000 บาท จำนวนปี 1 ปี และอัตราดอกเบี้ยต่อปี 0.07 (7%)

  1. ให้สร้างกรณีทดสอบ และทำการทดสอบโปรแกรม พร้อมทั้งแก้ไขโปรแกรมต่อไปนี้ให้สามารถทำงานได้ โปรแกรมนี้ต้องการรับค่าอายุเป็นจำนวนเต็มเข้ามาแล้วตรวจสอบช่วงอายุเพื่อประเมินช่วงวัยของบุคคล ดังนี้

    • ถ้ามีอายุเท่ากับ 0 ปี ให้แสดงข้อความว่าระบุช่วงวัยเป็นทารก (baby)

    • ถ้ามีอายุตั้งแต่ 12 ปี ให้แสดงข้อความว่าระบุช่วงวัยเป็นเด็ก (child)

    • ถ้ามีอายุมากกว่า 12 ปี แต่น้อยกว่าหรือเท่ากับ 19 ปี ให้แสดงข้อความระบุช่วงวัยเป็นวัยรุ่น (teenager)

    • ถ้ามีอายุมากกว่า 19 ปี แต่น้อยกว่าหรือเท่ากับ 65 ปี ให้แสดงข้อความระบุช่วงวัยเป็นวัยผู้ใหญ่ (adult)

    • ถ้ามีอายุมากกว่า 65 ปี แต่น้อยกว่าหรือเท่ากับ 120 ปี ให้แสดงข้อความระบุช่วงวัยเป็นวัยผู้สูงอายุ (senior citizen)

    • หากมีอายุนอกช่วงที่กำหนดให้แสดงข้อความว่า Unknown age classification.

import java.util.Scanner;
public class Age
{
    public static void main (String args []) 
    {
        Scanner sc = new Scanner(System.in);
        System.out.println ("Welcome to Age Program.");
        System.out.print ("Enter age : ");
        int age = sc.nextInt ();
            if (age = 0) 
                    System.out.println ("Person aged " + age + " is a baby.");
        else if age <= 12 
            System.out.println ("Person aged " + age + " is a child.");
        else if (12 < age <= 19) 
            System.out.println ("Person aged " + age + " is a teenager.");
        else if (19 > age && age <= 65);
            System.out.println ("Person aged " + age + " is an adult.");
        else if (age > 65 && age <= 120) 
            System.out.println ("Person aged " + age + " is a senior citizen.");
        else 
            System.out.println ("Unknown age classification.");
        System.out.println ("Done with Age Program.");
       }
    }