Program Flows in Java

โดย เม้ง

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

2. วัตถุประสงค์
เพื่อที่จะให้คุณผู้อ่านได้รู้จักและคุ้นเคยกับ
2.1 การตัดสินใจ ( Decision making ) ในโปรแกรมด้วย if statement
2.2 การใช้ลูปในโปรแกรม ( Looping )
2.3 การใช้ break และ continue statement
2.4 การใช้ switch statement

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

ในตัวอย่างข้างบนนี้คุณผู้อ่านจะเห็นว่ามีคำว่าถ้าอยู่ ในความเป็นจริงแล้วถ้านั้นเกี่ยวข้องกับการตัดสินใจ ในภาษาจาวานั้นคำที่แทนคำว่าถ้าก็คือ if นั่นเอง

syntax ของ if statement คือ

if ( a logical expression returning boolean "true" or "false" )
{
  do something .......
}

ถ้าเราเอาตัวอย่างเครื่องขายน้ำอัดลมอัตโนมัติมาใส่เข้าไปใน if statement ก็จะได้ว่า

if ( payment is equal to 10 baths )
{
  give customer the soda
}

ในเครื่องหมายวงเล็บที่อยู่ถัดจาก if นั้นอาจจะเป็นจริงหรือเป็นเท็จก็ได้ ถ้าเป็นจริงล่ะก็ expressions ที่อยู่ในเครื่องหมาย { } ( ปีกกา ) ก็จะถูก evaluated ทีนี้ถ้าเรามาแปล if statement ข้างบนนี้ก็จะอ่านได้ว่า ถ้าลูกค้าใส่เงินเข้ามาในช่องรับเงินเท่ากับสิบบาทล่ะก็เครื่องก็จะให้น้ำอัดลมกับลูกค้า แต่ถ้าลูกค้าให้เงินมาไม่เท่ากับสิบบาทล่ะจะเกิดอะไรขึ้น ถ้าภายในเครื่องหมายวงเล็บนั้นถูก evaluated เป็นค่าเท็จล่ะก็ expressions ในเครื่องหมายปีกกาก็จะไม่ถูกกระทำนั่นเองครับและจาวาก็จะไปสนใจในบรรทัดที่ต่อจากเครื่องหมายปีกกาปิด ( } ) เพราะฉะนั้นถ้าลูกค้าจ่ายเงินมาไม่เท่ากับสิบบาทล่ะก็เครื่องขายน้ำก็จะไม่ให้น้ำกับลูกค้านั่นเอง

เราสามารถเขียนเครื่องหมายปีกกาเปิดให้อยู่บรรทัดเดียวกับ if ก็ได้นะครับ เช่น

if ( payment is equal to 10 bahts ) {
  give customer the soda
}

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

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

if ( payment is greater than or equal to 10 bahts ) {
  give customer the soda
  calculate the change then give it back to the customer
}
else {
  calculate the amount of money to complete the purchase
  and show that amount to the customer
}

เพื่อความสะดวกในการอธิบาย ผู้เขียนจะขอเรียก expressions ที่ถูกครอบคลุมอยู่ในเครื่องหมายปีกกาเปิดและปิดว่า block นะครับ ใน if statement นั้นเราสามารถเพิ่ม else block เข้าไปได้ ถ้า logical expressions ในเครื่องหมายวงเล็บรีเทอร์นค่าจริงล่ะก็ if block ก็จะถูก evaluated แต่ถ้ารีเทอร์นค่าเท็จล่ะก็ else block ก็จะถูก evaluated แทน

if-else statement นั้นเปรียบเทียบได้กับทางแยกสองทาง คนที่เดินผ่านมาเจอทางสองแยกนี้จะต้องเลือกว่าจะเดินผ่านทางใดทางหนึ่งเท่านั้น และข้อมูลที่จะทำให้คนผู้นั้นตัดสินใจเดินไปทางใหนก็คือสิ่งที่อยู่ในเครื่องหมายวงเล็บนั่นเอง ทางทั้งสองทางนั้นจะมาบรรจบกันอีกครั้งหนึ่งที่จุดสิ้นสุดของ else block นั่นหมายความว่าหนึ่งในสอง blocks ( if หรือ else block ) เท่านั้นที่จะถูก evaluated ขึ้นอยู่กับว่า logical expression ในเครื่องหมายวงเล็บเป็นจริงหรือเท็จ และหลังจากที่ if หรือ else block ได้ถูก evaluated เรียบร้อยแล้วจาวาก็จะมา evaluate บรรทัดที่อยู่ต่อจาก else block ต่อไป

4. Nested if และ else if statements
เราสามารถใส่ if-else blocks เข้าไปในอีก if-else block หนึ่งได้ เรามาลองดัดแปลงตัวอย่างที่เรามีอยู่แล้วเพื่อให้มองเห็นภาพของการใช้ nested if-else blocks กันนะครับ ในตัวอย่างข้างบนนี้ถ้าลูกค้าให้เงินมาสิบบาทพอดีเครื่องก็ไม่ควรจะต้องทอนเงินใช่ใหมครับ

if ( payment is greater than or equal to 10 bahts ) {
  give customer the soda
  if ( payment is equal to 10 bahts ) {
    calculate the change then give it back to the customer
  }
}
else {
  calculate the amount of money to complete the purchase
  and show that amount of money to the customer
}

ในตัวอย่างข้างบนนี้คุณผู้อ่านคงจะสังเกตเห็นว่าเราได้เพิ่ม if block เข้าไปใน if block ข้างบนนี้ if ( payment is equal to 10 bahts )จะถูก evaluated ก็ต่อเมื่อ if ( payment is greater than or equal to 10 bahts ) เป็นจริงเท่านั้น

ในภาษา C และจาวานั้นการใส่ block เข้าไปในอีก block หนึ่งเรียกว่าการ nest หรือการใส่เข้าไปในกรงนั่นเองครับ ถ้าคุณผู้อ่านลองมองตัวอย่างนี้ให้ดีคุณจะพบว่าเราได้สร้าง tree ขึ้นมาแบบหนึ่งซึ่งมีรากหรือจุดเริ่มต้นที่ if block ที่อยู่นอกสุด if แรกนั้นได้แตกออกเป็นสองทางคือ if block กับ else block และภายใน if block แรกนั้นเรายังแตกออกได้เป็นอีก if block และ else block นึง ถ้าเราทำอย่างนี้ไปเรื่อย ๆ เราก็จะเห็นเป็นโครงสร้างของ tree นั่นเอง

ในจาวานั้นเราสามารถทำ nested if ให้ดูง่ายขึ้นได้
ถ้า nested if อยู่ในรูปแบบ

if ( condition 1 ) {
  expression 1;
}
else {
  if ( condition 2 ) {
    expression 2;
  }
  else {
    if ( condition 3 ) {
      expression 3;
    }
    else {
      if ( .... ) {
        ....
      }
      else {
        ....
      }
    }
  }
}

สามารถเปลี่ยนให้เป็น

if ( condition 1 ) {
  expression 1;
}
else if ( condition 2 ) {
  expression 2;
}
else if ( condition 3 ) {
  expression 3;
}
else if ( .... ) {
  ....
}
else {
  ....
}

ลักษณะของโครงสร้างข้างบนนี้เหมือนกับ tree มีรากที่จุดเดียวกันแต่แตกออกมาเป็นหลาย ๆ สาขาเท่ากับจำนวน block ที่มีอยู่ เรายังสามารถใส่ if-else block เข้าไปข้างในของ แต่ละ else if block ได้อีกกี่ชั้นก็ได้นะครับ

5. การใช้ Loop ในโปรแกรม
Loop นั้นเป็นเครื่องมือที่จะช่วยให้คอมพิวเตอร์ทำอะไรซ้ำ ๆ แทนมนุษย์ ในจาวานั้นเรามี loop อยู่สามแบบคือ while loop, do-while loop และ for loop

5.1 while loop
while loop นั้นเป็น loop พื้นฐานที่เกิอบจะทุกภาษาคอมพิวเตอร์จะต้องมีอยู่ while loop จะเริ่มต้นจากการเช็คคอนดิชันที่อยู่ในวงเล็บว่าเป็นจริงหรือเปล่า ถ้าคอนดิชันนั้นเป็นจริงอยู่ while loop ก็จะ evaluate expressions ทั้งหมดที่มีอยู่ใน while block แล้วจึงกลับมาเช็คคอนดิชันนั้นใหม่ while loop จะวนรอบอยู่อย่างนี้จนกระทั่งคอนดิชันนั้นเป็นเท็จจึงจะหลุดออกจาก while loop เพราะฉะนั้นถ้าคอนดิชันนั้นเป็นจริงตลอดเวลาโปรแกรมนั้นก็จะติดอยู่ใน infinite loop ซึ่งเป็นสิ่งที่โปรแกรมเมอร์ควรจะระวังไม่ให้เกิดขึ้น โดยปรกติแล้วการที่จะทำให้โปรแกรมหลุดออกจาก while loop นั้นตัวโปรแกรมจะต้องทำการ modify condition ภายใน block ให้เป็นเท็จเสียก่อน

รูปแบบของ while loop

while ( condition ) {
  expression 1;
  expression 2;
  ....

}

5.2 do-while loop
การทำงานของ do-while loop นั้นเกือบจะเหมือนกับ while loop เลยทีเดียวเพียงแต่ต่างกันตรงที่ while loop นั้นจะเช็คคอนดิชันก่อนที่จะเข้าไป evaluate expressions ใน block แต่ do-while loop นั้นจะ evaluate expressions ก่อนแล้วจึงเช็คคอนดิชันทีหลัง เพราะฉะนั้นถ้าคอนดิชันนั้นเป็นค่าเท็จก่อนที่จะเข้า loop ล่ะก็ while loop จะไม่ evaluate expressions ใน block เลยแม้แต่ครั้งเดียว แต่ do-while loop จะ evaluate expressions ใน block อย่างน้อยหนึ่งครั้ง สรุปว่าเราสามารถพูดได้ว่าใน do-while loop นั้นเรารับประกันได้เลยว่า expressions ใน block นั้นจะถูก evaluated อย่างน้อยหนึ่งครั้ง

รูปแบบของ do-while loop คือ

do {
  expression 1;
  expression 2;
  ....

} while ( condition );

โปรดสังเกตว่า do-while loop นั้นจะต้องมี semicolon ( ; ) เป็นตัวปิด statement อยู่ข้างหลังด้วย

5.3 for loop
for loop นั้นมีพื้นฐานมาจาก while loop นั่นเองเพียงแต่ว่า for loop ถูกออกแบบมาให้มี syntax ที่เข้าใจและใช้ได้ง่ายขึ้น 

รูปแบบของ for loop คือ

for ( initializing expression; condition-checking expression; incremental expression ) {
  expression 1;
  expression 2;
  ....
}

คุณผู้อ่านคงจะเห็นว่าในเครื่องหมายวงเล็บของ for นั้นเรามี 3 expressions ด้วยกัน

Table 1. For loop expressions

Expression Description
initializing expression expression ที่ใช้ในการ initialize variable ก่อนที่จะเข้าไปใน block
condition-checking expression expression ที่ for loop จะเช็คทุกครั้งก่อนที่จะ evaluate expressions ภายใน block ถ้าเป็นเท็จล่ะก็โปรแกรมก็จะหลุดออกจาก for loop
incremental expression expression ที่ for loop จะ evaluated ทุกครั้งหลังจากที่ expressions ทั้งหมดภายใน block ถูก evaluated เรียบร้อยแล้ว

เรามาดูตัวอย่างกันดีกว่านะครับ

โปรแกรมที่ 1

1    // forLoopExample.java
2    class forLoopExample {
3      public static void main(String args[]) {
4        // Printing number 1 to 10
5        int i;
6        for( i=1; i<=10; i++ ) {
7          System.out.println("Number " + i);
8        }
9      }
10   }

ในตัวอย่างข้างบนนี้ก่อนที่จะเริ่มเข้าไปใน loop ค่าของตัวแปร i จะถูกตั้งค่าให้เท่ากับ 1 หลังจากนั้นโปรแกรมก็จะเช็คว่าค่าของ i นั้นน้อยกว่าหรือเท่ากับ 10 หรือเปล่า ถ้าค่าของ i ยังน้อยกว่าหรือเท่ากับ 10 โปรแกรมก็จะเข้าไปใน block และ evaluate expressions ที่มีอยู่ใน block ซึ่งในที่นี้ก็คือ พิมพ์ค่าของ i ออกมาบนจอมอนิเตอร์ หลังจาก evaluate เสร็จโปรแกรมก็จะมา evaluate incremental expression ซึ่งก็คือ i++

หลังจากที่โปรแกรมวนไปครบสิบรอบค่าของ i ก็จะกลายเป็น 11 ซึ่ง คอนดิชัน i<=10 เป็นเท็จเพราะฉะนั้นโปรแกรมก็จะหลุดออกจาก for loop
เราสามารถเขียน for loop ในรูปของ while loop ได้ดังตัวอย่างข้างล่างนี้

โปรแกรมที่ 2

1    // whileForLoopExample.java
2    class whileForLoopExample {
3      public static void main(String args[]) {
4        // Printing number 1 to 10
5        int i;
6
7        i = 1;  //initializing expression
8        while (i<=10) {
9          System.out.println("Number " + i);
10         i++;  //incremental expression
11       }
12     }
13   }

Incremental expression นั้นไม่จำเป็นต้องเป็นการเพื่มของตัวเลขเสมอไป คุณผู้อ่านอาจจะใช้ class method หรือฟังก์ชันอย่างอื่นมาใส่ไว้ก็ได้

6. break และ continue
นอกเหนือจากคอนดิชันที่อยู่ในเครื่องหมายวงเล็บของ while, do-while และ for loop ที่เป็นตัวตัดสินใจว่าจะหยุดการวนรอบแล้วยังมีวิธีอื่นที่จะสามารถทำให้โปรแกรมออกจาก loop ได้อีก โดย statement ที่ทำหน้าที่นั้นก็คือ break นั่นเองครับ
โดยทั่วไป break statement นั้นจะถูกห่อหุ้มอยู่ใน if block ที่อยู่ใน loop อีกทีหนึ่ง ถ้า break statement ไม่อยู่ใน if block แล้วล่ะก็จะไม่มี loop ใหนเลยที่วนเกินหนึ่งรอบ เนื่องจากเราใส่ if (break_condition) { break; } เข้าไปใน loop เราก็จะมีคอนดิชันที่จะทำให้โปรแกรมหลุดออกจาก loop เพิ่มเป็นสองอันด้วยกัน เรามาดูตัวอย่างกันดีกว่านะครับ

โปรแกรมที่ 3

1    // breakLoopExample.java
2    class breakLoopExample {
3      public static void main(String args[]) {
4        // Printing number 1 to 10 but break at 5
5        int i;
6        for( i=1; i<=10; i++ ) {
7          System.out.println("Number " + i);
8          if ( i == 5 ) {
9            System.out.println("Break at i = " + i);
10           break;
11         }
12       }
13     }
14   }

ในตัวอย่างข้างบนนี้เราจะเห็นว่ามีอยู่สองคอนดิชันคือ i<=10 ในวงเล็บในบรรทัดเดียวกับ for และอีกอันหนึ่งก็คือ i==5 ใน if คุณผู้อ่านคงจะสงสัยนะครับว่าถ้าเราใส่เข้าไปใน condition-checking expression ในวงเล็บของ for ว่า i<=5 ก็ได้ผลเหมือนกันแล้วทำไมจะต้องเอา break statement มาใส่ให้ยุ่งยาก จริงๆแล้วมันไม่เหมือนกันนะครับเพราะว่าถ้าเราใช้ break statement เราสามารถเรียกคำสั่งบางอันก่อนที่จะ break ออกจาก loop ได้ตัวอย่างข้างบนก็คือการพิมพ์ Break at i = 5 ออกมาบนหน้าจอมอนิเตอร์

เครื่องมืออีกอันหนึ่งที่จะช่วยให้การใช้ loop มีประสิทธิภาพมากยิ่งขึ้นก็คือ continue statement ในบางครั้งคุณผู้อ่านคงจะไม่อยากให้ expressions ที่อยู่ใน loop นั้นถูก evaluated ทุกครั้งไปแต่มีบางกรณีเท่านั้นที่คุณผู้อ่านอยากจะให้โปรแกรมเข้าไป evaluate expressions บางส่วนของ loop เท่านั้น เรามาดูตัวอย่างการใช้ continue statement กันดีกว่าครับ

โปรแกรมที่ 4

1    // continueLoopExample.java
2    class continueLoopExample {
3      public static void main(String args[]) {
4        // Printing number 1 to 10 except 4 and 7
5        int i;
6        for( i=1; i<=10; i++ ) {
7          if ( i == 4 || i == 7 ) {
8            continue;
9          }
10         System.out.println("Number " + i);
11       }
12     }
13   }

ถ้าคุณผู้อ่านได้ลอง run ตัวอย่างข้างบนนี้คุณผู้อ่านคงจะสังเกตเห็นว่าค่า 4 และ 7 นั้นไม่ถูก print ออกมาเนื่องจากว่า continue statement นั้นจะทำให้โปรแกรมกระโดดข้าม expressions ที่เหลืออยู่ใน block ไปที่ด้านล่างสุดของ block (บรรทัดที่ 11) แล้วจึงกลับไปที่จุดเริ่มต้นของ loop (บรรทัดที่ 6) เพื่อเช็คคอนดิชันของรอบถัดไป

6. break และ continue แบบมี label
ในกรณีที่มีหลาย ๆ loops ซ้อน ๆ กันอยู่ break และ continue จะออกจาก loop ที่อยู่ด้านในที่สุดแต่ถ้าคุณผู้อ่านต้องการให้ โปรแกรมออกจาก loop ที่อยู่เหนือกว่า loop ที่อยู่ด้านในที่สุดก็จะต้องใช้ break และ continue แบบมี label แทน เรามาดูตัวอย่างเล็ก ๆ กันดีกว่าครับ

โปรแกรมที่ 5

1    // continueLoopWithoutLabelExample.java
2    class continueLoopWithoutLabelExample {
3      public static void main(String args[]) {
4        int i, j;
5        for( i=1; i<=3; i++ ) {
6          System.out.println("Begin loop #" + i);
7          j = 0;
8          while ( j <= 2 ) {
9            j++;
10           if ( i == 2 && j == 2 ) {
11             continue;
12           }
13           System.out.println("Number " + j);
14         }
15         System.out.println("End loop #" + i);
16       }
17     }
18   }

ผลลัพธ์ของโปรแกรมที่ 5

1    Begin loop #1
2    Number 1
3    Number 2
4    Number 3
5    End loop #1
6    Begin loop #2
7    Number 1
8    Number 3
9    End loop #2
10   Begin loop #3
11   Number 1
12   Number 2
13   Number 3
14   End loop #3

โปรแกรมที่ 6

1    // continueLoopWithLabelExample.java
2    class continueLoopWithLabelExample {
3      public static void main(String args[]) {
4        int i, j;
5        outerloop:
6        for( i=1; i<=3; i++ ) {
7          System.out.println("Begin loop #" + i);
8          j = 0;
9          innerloop:
10         while ( j <= 2 ) {
11           j++;
12           if ( i == 2 && j == 2 ) {
13             continue outerloop;
14           }
15           System.out.println("Number " + j);
16         }
17         System.out.println("End loop #" + i);
18       }
19     }
20   }

ผลลัพธ์ของโปรแกรมที่ 6

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

คุณผู้อ่านคงจะเห็นนะครับว่าในโปรแกรมที่ 6 นั้นต่างจากโปรแกรมที่ 5 ตรงที่โปรแกรมที่ 6 ไม่พิมพ์ทั้งค่า 2 และ 3 ในขณะที่โปรแกรมที่ 5 นั้นไม่พิมพ์เพียงแค่ค่า 2 เนื่องจากว่าในโปรแกรมที่ 6 นั้นเราได้ใช้ continue ที่ชี้ไปหา outer loop label เพราะฉะนั้นส่วนที่ทำค้างอยู่ใน inner loop จึงถูกยกเลิกไปด้วย ส่วนการใช้ break แบบมี label นั้นก็เหมือนกับ continue ครับ โดยปรกติ label นั้นจะต้องตามด้วยเครื่องหมาย colon หรือ ":" และ label นั้นสามารถอยู่บรรทัดเดียวกับจุดเรื่มต้นของ loop ได้ด้วยนะครับ คุณผู้อ่านคงจะเข้าใจการใช้ break และ continue แบบมี label มากขึ้นหลังจากได้ดูตัวอย่างข้างบนนี้

7. การใช้ switch statement
ถ้าเรามี else if structure ดังในโครงสร้างข้างล่างนี้

int intvar;

if ( intvar == 1 ) {
  expression 1;
}
else if ( intvar == 2 ) {
  expression 2;
}
else if ( intvar == 3 ) {
  expression 3;
}
else if ( intvar == 4 ) {
  expression 4;
}
else {
  expression 5;
}

เราจะสามารถเขียนให้อยู่ในรูปของ switch statement ได้ดังนี้

int intvar;

switch ( intvar ) {
  case 1:
    expression 1;
    break;
  case 2:
    expression 2;
    break;
  case 3:
    expression 3;
    break;
  case 4:
    expression 4;
    break;
  default:
    expression 5;
    break;
}
 
ในแต่ละ case นั้นสามารถมีได้หลาย expressions นะครับ คุณผู้อ่านคงจะจำได้นะครับว่า else if structure ข้างบนนี้มีความหมายเหมือนกับทางแยกหลาย ๆ ทาง (เท่ากับจำนวน blocks) เพราะฉะนั้นจะมีเพียง case ใด case หนึ่งเท่านั้นที่จะถูก evaluated สิ่งที่ทำให้ switch statement นั้นแตกต่างจาก else if structure นั้นก็คือ switch statement นั้นจะใช้ได้กับการเปรียบเทียบค่าของตัวแปรเท่านั้นและจะต้องเป็นตัวแปรตัวเดียวด้วยซึ่งในตัวอย่างข้างบนนี้ก็คือ intvar

เรามาลองดูตัวอย่างกันดีกว่านะครับ

โปรแกรมที่ 7

1    // switchExample.java
2    class switchExample {
3      public static void main(String args[]) {
4        int i = 3;
5        switch ( i ) {
6          case 1:
7            System.out.println("i is equal to one");
8            break;
9          case 2:
10           System.out.println("i is equal to two");
11           break;
12         case 3:
13           System.out.println("i is equal to three");
14           break;
15         case 4:
16           System.out.println("i is equal to four");
17           break;
18         case 5:
19           System.out.println("i is equal to five");
20           break;
21         default:
22           System.out.println("i is not equal to either one, two, three, four or five");
23           break;
24       }
25     }
26   }

ผลลัพธ์ของโปรแกรมที่ 7

i is equal to three

คุณผู้อ่านคงจะสังเกตเห็นนะครับว่าในแต่ละ case ของโครงสร้างของ switch นั้นจะมี break statement อยู่ด้วยนะครับ ถ้าเราไม่ใส่ break statement ลงไปล่ะก็ หลังจากที่ switch พบกับ case ที่ match กับค่าของ variable ที่อยู่ในวงเล็บแล้วล่ะก็ ทุก ๆ case ที่อยู่หลังจาก case นั้นจะถูก evaluated หมดจนกระทั่งโปรแกรมเจอกับ break statement หรือไม่ก็โปรแกรมออกจาก switch block
เรามาลองดูตัวอย่าง switch ที่ขาด break statement บางอันไปกันดีกว่าครับ

โปรแกรมที่ 8

1    // switchWithSomeBreakStatementExample.java
2    class switchWithSomeBreakStatementExample {
3      public static void main(String args[]) {
4        int i = 3;
5        switch ( i ) {
6          case 1:
7            System.out.println("i is equal to one");
8          case 2:
9            System.out.println("i is equal to two");
10         case 3:
11           System.out.println("i is equal to three");
12         case 4:
13           System.out.println("i is equal to four");
14         case 5:
15           System.out.println("i is equal to five");
16           break;
17         default:
18           System.out.println("i is not equal to either one, two, three, four or five");
19       }
20     }
21   }

ผลลัพธ์ของโปรแกรมที่ 8

i is equal to three
i is equal to four
i is equal to five

คุณผู้อ่านคงจะเห็นแล้วนะครับว่าหลังจากที่ switch statement นั้นพบว่า case 3: นั้น match กับค่าที่อยู่ในตัวแปร i หลังจากนั้น switch ก็จะ evaluate ทุก expressions ที่อยู่ใน case หลังจากนั้นจนกว่าจะเจอกับ break statement หรือไม่ก็จนหมด switch block

8. สิ่งที่คุณผู้อ่านควรจะได้รับหลังจากอ่านบทความนี้
8.1 สามารถเลือกใช้ if, if-else และ else if statement ได้ในแต่ละสถาณการณ์ได้อย่างถูกต้อง
2.2 สามารถเลือกใช้ while, do-while หรือ for loop ได้ในแต่ละสถาณการณ์ได้อย่างถูกต้อง
2.3 สามารถใช้ break และ continue statement เพื่อที่จะ หลุดออกจาก loop หรือ กระโดดข้ามบางรอบของ loop ได้อย่างถูกต้อง
2.4 สามารถใช้ switch statement ได้อย่างถูกต้อง
 


Copyright (C) 2000 www.jarticles.com