คำสั่งวนซ้ำ

17 August 2016

ในบทนี้ คุณจะได้เรียนรู้การควบคุมโปรแกรมโดยใช้คำสั่งวนซ้ำ เพื่อควบคุมโปรแกรมให้ทำงานซ้ำๆ ได้

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

การใช้คำสั่ง While loop

คำสั่งวนซ้ำที่ง่ายที่สุดในภาษา Java คือ คำสั่ง While loop โดยมันมีรูปแบบในการใช้งานดังนี้

while ( expression ) {
    // statements
}

ในการใช้งานคำสั่ง while สำหรับการสร้าง while loop และ expression คือเงื่อนไขที่จะให้โปรแกรมทำงานใน loop ถ้าหากเงื่อนไขเป็นจริงโปรแกรมจะทำงานในบล็อคคำสั่งวงเล็บปีกกา { } เมื่อเงือนไขเป็นเท็จโปรแกรมจะออกจากลูปจะทำงานคำสั่งต่อไปหลัง while

มาดูตัวอย่างการใช้ While loop ในภาษา Java กับการนับเลขอย่างง่าย

public class WhileLoop {
    public static void main(String[] args) {       
        int i = 1;

        while ( i <= 10 ) {
            System.out.print (i  + ", ");
            ++i;
        }     

        System.out.println("End");
    }
}

ในโปรแกรม นั้นเราได้ประกาศตัวแปร i มาใช้ในการนับ ในเงือนไขของ while เราได้ตรวจสอบว่าถ้าหาก i น้อยกว่าหรือเท่ากับ 10 while ( i <= 10 ) โปรแกรมจะทำงานใน loop และแสดงค่า i ออกมา แต่ละรอบเราจะทำการเพิ่มค่าของ i ด้วยคำสั่ง ++i; เพื่อป้องกันไม่ให้ลูปทำงานตลอดไป (Infinity loop) จนกว่าเงือนไขไม่เป็นจริง โปรแกรมได้ออกนอกลูปและทำคำสั่งต่อมา

1,  2, 3, 4, 5, 6, 7, 8, 9, 10, End

ข้างล่างนี้เป็นผลลัพธ์ของโปรแกรม คุณจะเห็นว่ามันวิเศษไปเลย เราสามารถทำให้มันแสดงผลได้ 10 ครั้งเพียงแค่เขียนโปรแกรมไม่กี่บรรทัด แน่นอนคุณจะทำให้มันแสดงถึง 100 ก็ยังได้ เพียงแค่เปลี่ยนเงือนไขในเป็น while ( i <= 100 ) แค่นั้นเอง

การใช้คำสั่ง Do-While loop

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

do {
    // statements
} while ( expression );

ต่อไปมาดูตัวอย่างการใช้งานคำสั่ง do-while loop ในภาษา Java เราจะเขียนโปรแกรมในการตรวจสอบตัวเลข ว่าเป็นจำนวนคี่หรือคู่ (odd or even number)

import java.util.Scanner;

public class DoWhileLoop {
    public static void main(String[] args) {       
        Scanner reader  = new Scanner(System.in);
        int number;

        System.out.println("\tDetermine odd/even program");

        do {
            System.out.print("Enter odd number to exit loop: ");
            number = reader.nextInt();

            if (number % 2 == 0) {
                System.out.println("You entered " + number + ", it's even.");
            } else {
                System.out.println("You entered " + number + ", it's odd.");
            }

        } while (number % 2 == 0);

        System.out.println("Exited loop.");

    }
}

ในตัวอย่างโปรแกรมจะถามให้ผู้ใช้กรอกตัวเลขคี่ (odd number) เพื่ออกจากลูป โปรแกรมจะทำงานในลูปเรื่อยๆ ถ้าหากเขายังคงกรอกเลขคู่ (even number) โดย number % 2 == 0 เป็น expression เพื่อตรวจสอบว่าตัวเลขเป็นเลขคู่หรือไม่ โดยการใช้ตัวดำเนินการ Mod เลขคู่คือเลขที่หารด้วย 2 แล้วมีเศษเป็น 0

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

    Determine odd/even program
Enter odd number to exit loop: 2
You entered 2, it's even.
Enter odd number to exit loop: 4
You entered 4, it's even.
Enter odd number to exit loop: 8
You entered 8, it's even.
Enter odd number to exit loop: 0
You entered 0, it's even.
Enter odd number to exit loop: 3
You entered 3, it's odd.
Exited loop.

และนี่คือผลลัพธ์ของโปรแกรม โปรแกรมจะออกจากลูปเมื่อผู้ใช้กรอกเลขคี่ ซึ่งก็คือ 3 สำหรับตัวอย่าง

การใช้คำสั่ง For loop

คุณได้เรียนรู้คำสั่งลูปพื้นฐานไปแล้ว ต่อไปเราจะให้คุณรู้จักกับ For loop ซึ่งเป็น loop ที่นิยมใช้กันเป็นจำนวนมาก เพราะว่า Foor loop มักจะใช้กับ Loop ที่ทราบจำนวนการวนซ้ำที่แน่นอน และมันอำนวยความสะดวกในการประกาศตัวแปรเริ่มต้น กำหนดเงือนไข และเพิ่มลดค่าไว้ที่เดียวกัน ซึ่งตัวแปรเหล่านี้สามารถใช้ได้เพียงแค่ใน Loop scope เท่านั้น

การใช้คำสั่ง For loop ในภาษา Java นั้นมีรูปแบบดังนี้

for (initial; condition; update) {
    // Statements
}

สำหรับรูปแบบของ for loop นั้นจะมีการกำหนดส่วนประกอบ 3 ส่วนคือ initial คือการประกาศส่วนเริ่มต้นของลูป เช่น กำหนดค่าให้กับตัวแปร condition คือการกำหนดเงือนไขที่จะให้ทำงานในลูป และ update เป็นการอัพเดทค่าหลังจากจบแต่ละลูป ซึ่งจะเห็นว่ามันรวมกันที่ส่วนหัวของ for ซึ่งง่ายต่อการใช้งาน

ต่อไปมาดูตัวอย่าง การใช้ For loop ในภาษา Java ตัวอย่างนี้ เราจะใช้ตัวอย่างเดียวกันกับ While loop คือแสดงเลข 1 - 10

public class ForLoop {
    public static void main(String[] args) {
        for (int i = 1; i <= 10; i++) {
            System.out.println("Loop " + i);
        }
        System.out.println("End of loop");
    }
}

จากตัวอย่างนั้นจะได้ผลลัพธ์เช่นกันกับ while loop ในตัวอย่างก่อนหน้า คุณจะเห็นว่ามันง่ายและสะดวกกว่าในการใช้ นอกจากนี้ For loop ยังนิยมใช้กับข้อมูลแบบอาเรย์ คุณจะได้เรียนในบทต่อไป

Nested For loop

เช่นเดียวกัน คำสั่ง loop ทุกชนิดสามารถที่จะซ้อนกันได้ ซึ่งเราเรียกว่า Nested loop ต่อไปมาดูตัวอย่างการใช้คำสั่ง For loop ซ้อนกัน โดยเราจะสร้างแมทริกขนาด 2 มิติ ที่แต่ละค่าเป็นค่าของ i และ j คูณกัน

public class ForLoop {
    public static void main(String[] args) {
        int width = 6;
        int height = 6;

        System.out.println("\tMatrix program");
        for (int i = 1; i <= height ; i++) { 
            for (int j = 1; j <= width ; j++) {
                System.out.print("\t" + (i * j));
            }
            System.out.println();
        }
    }
}

ในตัวอย่าง เราได้สร้าง For loop สองอันที่ซ้อนกันอยู่ โดยลูปข้างนอก (outer loop) จะทำการวนตามจำนวนในตัวแปร height และลูปข้างใน (inner loop) จะทำการวนตามจำนวน width ผลลัพธ์ตัวเลขที่ได้นั้นเกิดจาก ค่าของ i * j และเราใช้ Tab (\t) เพื่อทำให้มันสวยงาม

    Matrix program
    1   2   3   4   5   6
    2   4   6   8   10  12
    3   6   9   12  15  18
    4   8   12  16  20  24
    5   10  15  20  25  30
    6   12  18  24  30  36

และนี่เป็นผลลัพธ์ของโปรแกรม Nested for loop

ในการเขียนโปรแกรมทำงานกับ Loop นั้นจะมีคำสั่งสองชนิดที่คุณมักจะต้องใช้ควบคุมการทำงานของ Loop ในกรณีพิเศษ โดยคำสั่งเหล่านั้นคือ Continue และ Break

การใช้คำสั่ง Continue

คำสั่ง Continue คือคำสั่งที่ใช้ในการข้ามการทำงานของลูปในรอบปัจจุบัน นั่นหมายความว่า ลูปจะเริ่มต้นคำสั่งใหม่ทันทีเมื่อเจอคำสั่ง continue; สำหรับตัวอย่งการใช้คำสั่ง Continue ในภาษา Java

public class ContinueStatement {
    public static void main(String[] args) {

        for (int i = 10; i >= 1; i--) {
            if (i == 5) {
                continue;
            }
            System.out.print(i + ", ");
        }
        System.out.println(" End");
    }
}

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

10, 9, 8, 7, 6, 4, 3, 2, 1,  End

นี่เป็นลัพธ์ของโปรแกรม คุณจะพบว่าเลข 5 นั้นไม่ถูกแสดงผล เพราะเป็นผลของคำสั่ง Continue นั่นเอง

การใช้คำสั่ง Break

คำสั่ง break เป็นคำสั่งที่ใช้ในการหยุดการทำงานของลูปในทันที มันไม่ได้สนใจว่าเงื่อนไขการทำงานของลูปจะเป็นจริงอยู่ เมื่อโปรแกรมเจอคำสั่ง break มันจะออกจากลูปและทำงานต่อไปหลังจากลูปในทันที สำหรับตัวอย่างการใช้คำสั่ง ฺbreak ในภาษา Java

public class BreakStatement {
    public static void main(String[] args) {     
        int i = 1;

        while (i <= 10) {       
            if (i == 7) {
                break;
            }
            System.out.print(i + ", ");
            ++i;
        }
        System.out.println(" End");
    }
}

ในตัวอย่างข้างบน เป็นการใช้งานคำสั่ง While loop เช่นเดิม โปรแกรมของเราเป็นโปรแกรมในการแสดงตัวเลข 1 - 10 ในตัวอย่างเราได้ใช้คำสั่ง if (i == 7) ดังนั้นเมื่อ i เท่ากับ 7 โปรแกรมจะไปทำงานคำสั่ง break และออกจาก While loop ในทันที ถึงแม้ว่าค่าของ i จะยังน้อยกว่า 10 อยู่ก็ตาม

1, 2, 3, 4, 5, 6,  End

นี่เป็นผลลัพธ์ของโปรแกรมที่แสดงถึงเลข 6 เพราะว่ามันเจอคำสั่ง break เมื่อ i เป็น 7

คำสั่ง break และ continue นั้นถือว่ามีประโยชน์อย่ามากในการเขียนโปรแกรม ในกรณีที่ต้องการให้มันออกจาก Loop ในเงือนไข เช่น การเขียนเกม นอกจากเกมจะบลหลังจากที่มัน Over แล้ว ผู้ใช้ยังสามารถกดปุ่ม ESC เพื่อออกจากเกมได้ เป็นต้น

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

บทความนี้เป็นประโยชน์หรือไม่?Yes·No