4  โครงสร้างโปรแกรมแบบเลือกทำ

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

  1. เพื่อให้สามารถเขียนโปรแกรมแบบเลือกทำโดยใช้คำสั่ง if ได้

  2. เพื่อให้สามารถเขียนโปรแกรมแบบเลือกทำโดยใช้คำสั่ง if-else ได้

  3. เพื่อให้สามารถเขียนโปรแกรมแบบเลือกทำโดยใช้คำสั่ง if หลายชั้นได้

  4. เพื่อให้สามารถเขียนโปรแกรมแบบเลือกทำโดยใช้คำสั่ง switch-case ได้

  5. เพื่อให้สามารถกำหนดเงื่อนไขในการเลือกทำได้อย่างเหมาะสม

การเขียนโปรแกรมให้คอมพิวเตอร์สามารถแก้ไขปัญหาที่มีการตัดสินใจได้จำเป็นต้องอาศัยคำสั่งในการเลือกทำและการสร้างเงื่อนไขในการตัดสินใจทำให้คอมพิวเตอร์มีความฉลาดสามารถที่จะตัดสินใจแทนมนุษย์ได้ ดังนี้ในบทนี้จะกล่าวถึงการเขียนโปรแกรมแบบเลือกทำโดยใช้คำสั่ง if, if-else, if หลายชั้น และ switch-case

4.1 คำสั่ง IF

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

    if (เงื่อนไข)
    {
        กลุ่มคำสั่งที่จะทำงานเมื่อเงื่อนไขเป็นจริง;
    }

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

ภาพที่ 4-1 ผังงานของคำสั่ง if
ตัวอย่างที่ 4.1 โปรแกรม ConditionEx1.java
  //Simple if example.
    public class ConditionEx1 {
        public static void main (String args[])  {
                boolean rain = false;
            if(rain==true) {
               System.out.println(“Wear rain coat.);
            }
        }       
ผลลัพธ์ของโปรแกรม คือ

จากตัวอย่างที่ 4.1 โปรแกรมจะไม่พิมพ์ค่าใด ๆ ออกทางจอภาพเพราะตัวแปร rain มีค่าเป็น false ทำให้เงื่อนไขเป็นเท็จ ดังนั้นคำสั่ง System.out.println(“Wear rain coat.”); ไม่ถูกทำงานจึงไม่มีการพิมพ์ข้อความ วัตถุประสงค์การทำงานของโปรแกรมนี้คือเมื่อตัวแปร rain มีค่าเป็น true จะพิมพ์ข้อความว่า Wear rain coat แต่ถ้าเป็น false จะไม่พิมพ์ข้อความ ดังผังงานต่อไปนี้

ภาพที่ 4-2 ผังงานของโปรแกรมตัวอย่างที่ 4.1
ตัวอย่างที่ 4.2 โปรแกรม ConditionEx2.java
    import java.util.Scanner;
    public class ConditionEx2 {
        public static void main (String args[])  {
            Scanner sc = new Scanner(System.in);
            System.out.println(“Enter age:);
            int age = sc.nextInt();
                String description = “young”;
            if(age > 60) 
                description = “old”;
            System.out.println(“You are ” + description);
        }       
    }   

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

กรณีป้อนค่า age เป็น 20

Enter age: 20

You are young

กรณีป้อนค่า age เป็น 80

Enter age: 80

You are old

กรณีป้อนค่า age เป็น 60

Enter age: 60

You are young

ภาพที่ 4-3 ผังงานของโปรแกรมตัวอย่างที่ 4.2
ตัวอย่างที่ 4.3 โปรแกรม ConditionEx3.java
    public class ConditionEx3 {
        public static void main(String[] args) {
            int cash = 200;
            int bookPrice = 180;
            if(cash >= bookPrice) {
                cash -= bookPrice;
                System.out.println(“Buy book.);
            }
            System.out.println(“Cash =+ cash);
        }
    }   
ผลลัพธ์ของโปรแกรม คือ

Buy book.

Cash = 20

จากตัวอย่างที่ 4.3 เงื่อนไขเป็นจริงเนื่องจาก 200 >= 180 จึงทำคำสั่งที่อยู่ภายใน if คือคำนวณค่า cash = 200 – 180 = 20 และพิมพ์ข้อความว่า Buy book แล้วจึงพิมพ์ข้อความว่า Cash = 20

ตัวอย่างต่อไปนี้เป็นการใส่คำสั่ง if หลายคำสั่งต่อเนื่องกันเพื่อให้มีการตรวจสอบเงื่อนไขหลายครั้ง

ตัวอย่างที่ 4.4 โปรแกรม ConditionEx4.java
    import java.util.Scanner;
    public class ConditionEx4 {
        public static void main (String args[])  {
            Scanner sc = new Scanner(System.in);
            System.out.println(“Enter age:);
            int age = sc.nextInt();
                String description = “young”;
            if(age > 60) 
                description = “old”;
            if(age <= 60)
                description = “not old”;
            System.out.println(“You are ” + description);
        }           
    }

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

กรณีป้อนค่า age เป็น 20

Enter age: 20

You are not old

กรณีป้อนค่า age เป็น 80

Enter age: 80

You are old

กรณีป้อนค่า age เป็น 60

Enter age: 60

You are young

ตัวอย่าง 4.4 มีการตรวจสอบเงื่อนไข 2 ครั้ง คือ ครั้งแรกตรวจสอบว่า age > 60 หรือไม่ ถ้าเป็นจริงจะทำคำสั่ง description = “old”; ต่อมาตรวจสอบเงื่อนไขครั้งที่สองคือ age <= 60 หรือไม่ ถ้าเป็นจริงจะทำคำสั่ง description = “not old”;

4.2 คำสั่ง IF-ELSE

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

    if (เงื่อนไข) {
        กลุ่มคำสั่งที่จะทำงานเมื่อเงื่อนไขเป็นจริง;
    }
    else {
        กลุ่มคำสั่งที่จะทำงานเมื่อเงื่อนไขเป็นเท็จ;
    }

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

ภาพที่ 4-4 ผังงานของคำสั่ง if-else
ตัวอย่างที่ 4.5 โปรแกรม ConditionEx5.java
    import java.util.Scanner;
    public class ConditionEx5 {
        public static void main (String args[])  {
            Scanner sc = new Scanner(System.in);
            System.out.println(“Enter age:);
            int age = sc.nextInt();
                String description = “young”;
            if(age > 60) 
                    description = “old”;
            else
                description = “not old”;
            System.out.println(“You are ” + description);
        }       
    }

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

กรณีป้อนค่า age เป็น 20

Enter age: 20

You are not old

กรณีป้อนค่า age เป็น 80

Enter age: 80

You are old

กรณีป้อนค่า age เป็น 60

Enter age: 60

You are young

ตัวอย่าง 4.5 มีการตรวจสอบเงื่อนไขว่า age > 60 หรือไม่ ถ้าเป็นจริงจะทำคำสั่ง description = “old”; ถ้าเงื่อนไขเป็นเท็จจะทำคำสั่ง description = “not old”; ดังนั้นกรณี age = 20 ทำให้เงื่อนไขเป็นเท็จ (เพราะ 20 ไม่ได้มากกว่า 60) โปรแกรมจึงทำคำสั่ง description = “not old”; กรณีที่ age = 80 ทำให้เงื่อนไขเป็นจริง (เพราะ 80 มากกว่า 60) โปรแกรมจึงทำคำสั่ง description = “old”; และกรณี age = 60 ทำให้เงื่อนไขเป็นเท็จ (เพราะ 60 ไม่ได้มากกว่า 60) โปรแกรมจึงทำคำสั่ง description = “not old”;

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

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

if (age > 60)
{
     description = “old”;
     hair = “white”;
}
else
{
      description = “not old”;  
      hair = “black and white”;
}
ตัวอย่างที่ 4.6 โปรแกรม ConditionEx6.java
    public class ConditionEx6 {
        public static void main (String args[])  {
            int cash = 200;
            int price = 380;
                if(cash >= price) {
                cash -= price;
                System.out.println(“Use cash”);
            }
            else
                System.out.println(“Use card”);
        }       
    }
ผลลัพธ์ของโปรแกรม คือ

Use card

จากตัวอย่างที่ 4.6 เงื่อนไข cash >= price เป็นเท็จเนื่องจากค่าในตัวแปร cash คือ 200 ไม่ได้มากกว่าหรือเท่ากับค่าในตัวแปร price คือ 380 จึงทำคำสั่งที่ else คือพิมพ์ข้อความว่า Use card

4.3 คำสั่ง IF หลายชั้น

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

    if (เงื่อนไขที่ 1)  {
        กลุ่มคำสั่งที่จะทำงานเมื่อเงื่อนไขที่ 1 เป็นจริง;
    }
    else if (เงื่อนไขที่ 2)  {
        กลุ่มคำสั่งที่จะทำงานเมื่อเงื่อนไขที่ 1 เป็นเท็จและเงื่อนไขที่ 2 เป็นจริง;
    }
    else if (เงื่อนไขที่ 3)  {
        กลุ่มคำสั่งที่จะทำงานเมื่อเงื่อนไขก่อนหน้าทั้งหมดเป็นเท็จและเงื่อนไขที่ 3 เป็นจริง;
    }
    else  {
          กลุ่มคำสั่งที่จะทำงานเมื่อเงื่อนไขก่อนหน้าทั้งหมดเป็นเท็จ;
    }

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

ภาพที่ 4-6 ผังงานของคำสั่ง if หลายชั้นแบบ if-else-if

ตัวอย่างการเขียนโปรแกรมด้วยคำสั่ง if หลายชั้นแบบ if-else-if ในการตัดเกรดโดยมีเงื่อนไข คือ

คะแนนตั้งแต่ 80 ขึ้นไปได้เกรด A 

คะแนนตั้งแต่ 70 ขึ้นไปแต่ไม่ถึง 80 ได้เกรด B 

คะแนนตั้งแต่ 60 ขึ้นไปแต่ไม่ถึง 70 ได้เกรด C

คะแนนตั้งแต่ 50 ขึ้นไปแต่ไม่ถึง 60 ได้เกรด D

คะแนนไม่ถึง 50 ได้เกรด E
ตัวอย่างที่ 4.7 โปรแกรม ConditionEx7.java
    import java.util.Scanner;
    public class ConditionEx7 {
        public static void main (String args[])  {
            Scanner sc = new Scanner(System.in);
            System.out.println(“Enter score:);
            int score = sc.nextInt();
            char grade = ‘’;
                if(score >= 80) 
                    grade = ‘A’;
            else if(score >= 70) 
                    grade = ‘B’;
            else if(score >= 60) 
                    grade = ‘C’;
            else if(score >= 50) 
                    grade = ‘D’;
            else 
                    grade = ‘E’;
            System.out.println(“Your grade is ” + grade);
        }       
    }

ผลลัพธ์ของโปรแกรมจะขึ้นอยู่กับคะแนนที่ผู้ใช้ป้อน เช่น

กรณีป้อนคะแนนเป็น 95

Enter score: 95

Your grade is A

กรณีป้อนคะแนนเป็น 70

Enter score: 70

Your grade is B

กรณีป้อนคะแนนเป็น 45

Enter score: 45

Your grade is E

กรณีป้อนคะแนนเป็น 63

Enter score: 63

Your grade is C

กรณีป้อนคะแนนเป็น 54

Enter score: 54

Your grade is D

นอกจากนี้คำสั่ง if หลายชั้นรูปแบบที่กล่าวมาข้างต้นแล้วยังสามารถเขียนในรูปแบบอื่น ๆ เช่น

ตัวอย่างที่ 4.8
if (age > 60)
      if (weight < 90)
            description = “Very Good”;
      else
          description = “Medium”;    
else
      if (weight < 90)
          description = “OK”;
      else
          description = “Not Good”;

ผังงานของส่วนของโปรแกรมข้างต้นเป็นดังนี้

ภาพที่ 4-7 ผังงานของส่วนของโปรแกรมในตัวอย่างที่ 4.8

ดังนั้นการทำงานตามส่วนของโปรแกรมในตัวอย่างที่ 4.8 กรณี age = 20 และ weight = 40 ค่าของ description = “OK” กรณี age = 80 และ weight = 100 ค่าของ description = “Very Good”

ตัวอย่างที่ 4.9
if (age >60)  {
      description =“Old”;
      skin = “Not Good”
}
if (age > 40)  {
      description =“Not Old”;
      skin =“Medium”;
}
else {
       description = “Young”
       skin =“ Good”
}

ผังงานของส่วนของโปรแกรมข้างต้นเป็นดังนี้

ภาพที่ 4-8 ผังงานของส่วนของโปรแกรมในตัวอย่างที่ 4.9

จากตัวอย่างที่ 4.9 ส่วนของโปรแกรมนี้ในส่วนของคำสั่ง if แรกที่มีเงื่อนไขคือ (age >60) เป็น if อย่างง่ายที่ไม่มี else ส่วนคำสั่ง if ต่อมาซึ่งมีเงื่อนไขคือ (age > 40) เป็นคำสั่งคนละกลุ่มกัน

4.4 เงื่อนไขในการเลือกทำ ตัวดำเนินการ และนิพจน์ตรรกะ

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

    >   แทนการเปรียบเทียบ มากกว่า

    =   แทนการเปรียบเทียบ มากกว่าหรือเท่ากับ

    <   แทนการเปรียบเทียบ น้อยกว่า

    <=  แทนการเปรียบเทียบ น้อยกว่าหรือเท่ากับ

    ==  แทนการเปรียบเทียบ เท่ากับ

    !=  แทนการเปรียบเทียบ ไม่เท่ากับ

และสามารถเชื่อมนิพจน์เหล่านี้ด้วยตัวดำเนินการตรรกะ เช่น และ (&&), หรือ (||) , นิเสธ (!) เป็นต้น ซึ่งได้กล่าวถึงไปแล้วในบทที่ 3 เรื่องตัวดำเนินการ ในบทนี้จะเห็นได้ว่าคำสั่งในการเลือกและเงื่อนไขจะทำให้เราสามารถเขียนโปรแกรมในการแก้ไขปัญหาได้หลากหลายและมีประสิทธิภาพมากขึ้น

ตัวอย่างที่ 4.10 ตัวอย่างการเชื่อมนิพจน์ด้วยและ (&&)
if (age >60 && weight < 90)
      description =“Good”;
else
      description =“Medium”;

จากส่วนของโปรแกรมในตัวอย่างที่ 4.10 มีตัวอย่างการทำงานดังนี้

    ถ้า age มีค่าเป็น 65 และ weight มีค่าเป็น 70 แล้ว description = “Good”;

    ถ้า age มีค่าเป็น 45 และ weight มีค่าเป็น 70 แล้ว description = “Medium”;

    ถ้า age มีค่าเป็น 65 และ weight มีค่าเป็น 90 แล้ว description = “Medium”;

    ถ้า age มีค่าเป็น 45 และ weight มีค่าเป็น 90 แล้ว description = “Medium”;
ตัวอย่างที่ 4.11 ตัวอย่างการเชื่อมนิพจน์ด้วยหรือ (||)
if (age >60 || weight < 90)
      description =“Good”;
else
      description =“Medium”;

จากส่วนของโปรแกรมในตัวอย่างที่ 4.11 มีตัวอย่างการทำงานดังนี้

    ถ้า age มีค่าเป็น 65 และ weight มีค่าเป็น 70 แล้ว description = “Good”;

    ถ้า age มีค่าเป็น 45 และ weight มีค่าเป็น 70 แล้ว description = “Good”;

    ถ้า age มีค่าเป็น 65 และ weight มีค่าเป็น 90 แล้ว description = “Good”;

    ถ้า age มีค่าเป็น 45 และ weight มีค่าเป็น 90 แล้ว description = “Medium”;

สิ่งสำคัญในการแก้ปัญหาด้วยโปรแกรมประการหนึ่งคือนักเขียนโปรแกรมจะต้องสามารถแปลงปัญหาให้อยู่ในรูปแบบขั้นตอนวิธีที่เหมาะสมได้ และสามารถเขียนเงื่อนไขที่ถูกต้องได้

ตัวอย่างเช่น หากต้องการเปรียบเทียบค่าของตัวแปร x ว่ามีค่าอยู่ในช่วง 10 ถึง 80 หรือไม่ต้องเขียนนิพจน์อย่างไรเมื่อต้องการให้ 10 <= x <= 80 สำหรับการสร้างนิพจน์ตรรกะเพื่อตรวจสอบเงื่อนไขนี้ควรเขียนดังนี้คือ (x >= 10) && (x <= 80) เป็นการสร้างเงื่อนไขโดยใช้ 2 นิพจน์ซึ่งสร้างขึ้นด้วยตัวดำเนินการเปรียบเทียบ นิพจน์แรกเป็นการเปรียบเทียบว่า x มากกว่าหรือเท่ากับ 10 หรือไม่ และนิพจน์ที่สองเป็นการเปรียบเทียบว่า x น้อยกว่าหรือเท่ากับ 80 หรือไม่ แล้วเชื่อมทั้งสองนิพจน์นี้ด้วยตัวดำเนินการตรรกะคือ และ (&&)

นอกจากนี้แล้วในปัญหาจริงอาจมีการใช้ข้อความบรรยายเพื่อแสดงถึงเงื่อนไขได้หลายรูปแบบ ตัวอย่างเช่น การอธิบายถึงเงื่อนไขเกี่ยวกับรายได้ (income)

    รายได้ตั้งแต่ 10,000 บาทขึ้นไป  เงื่อนไขที่ควรจะใช้คือ income >= 10000 

    รายได้ไม่น้อยกว่า 10,000 บาท    เงื่อนไขที่ควรจะใช้คือ income >= 10000 

    รายได้ไม่เกิน 10,000 บาท    เงื่อนไขที่ควรจะใช้คือ income <= 10000

    รายได้ไม่ถึง 10,000 บาท     เงื่อนไขที่ควรจะใช้คือ income < 10000 

เป็นต้น

4.5 คำสั่ง SWITCH-CASE

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

    switch (นิพจน์ตัวแปร)  {
        case ค่ากรณีที่ 1: 
            กลุ่มคำสั่งที่จะทำงานเมื่อนิพจน์ตัวแปรมีค่าเท่ากับค่าที่กำหนดในกรณีที่ 1;
            break;
    case ค่ากรณีที่ 2: 
            กลุ่มคำสั่งที่จะทำงานเมื่อนิพจน์ตัวแปรมีค่าเท่ากับค่าที่กำหนดในกรณีที่ 2;
            break;
    default:    
                กลุ่มคำสั่งที่จะทำงานเมื่อนิพจน์ตัวแปรไม่เท่ากับค่าในกรณีใดเลย
    }

ชนิดของข้อมูลของนิพจน์ตัวแปรใน switch จะต้องเป็นชนิด char, byte, short, int หรือ String เท่านั้น

ตัวอย่างการเขียนโปรแกรมด้วยคำสั่ง switch-case เพื่อแสดงข้อความป้อนกลับจากระดับขึ้นหรือเกรดที่ได้รับโดยมีเงื่อนไข ดังนี้

    ได้เกรด A ให้แสดงข้อความคือ “Very good”  

    ได้เกรด B ให้แสดงข้อความคือ “Good”

    ได้เกรด C ให้แสดงข้อความคือ “Fair”

    ได้เกรด D ให้แสดงข้อความคือ “Bad”

    ได้เกรด E ให้แสดงข้อความคือ “Very bad”

    ถ้าไม่ตรงกับเกรดได้เลยให้แสดงข้อความว่า “No feedback”
ตัวอย่างที่ 4.12 โปรแกรม ConditionEx12.java
    import java.util.Scanner;
    public class ConditionEx12  {
        public static void main (String args[])  {
            Scanner sc = new Scanner(System.in);
            System.out.println(“Enter grade:);
            char grade = sc.nextChar();
            switch(grade) { 
                    case ‘A’:       System.out.println(“Very good”);
                            break;
                case ‘B’:   System.out.println(“Good”);
                            break;
                    case ‘C’:   System.out.println(“Fair”);
                            break;
                    case ‘D’:   System.out.println(“Bad”);
                            break;
                    case ‘E’:   System.out.println(“Very bad”);
                            break;
                default:    System.out.println(“No feedback ”);
            }
        }       
    }

โปรแกรมตัวอย่างที่ 4.12 จะเหมือนกับการใช้คำสั่ง if-else-if ในตัวอย่างที่ 4.13 ดังนี้

ตัวอย่างที่ 4.13 โปรแกรม ConditionEx13.java
    import java.util.Scanner;
    public class ConditionEx13  {
        public static void main (String args[])  {
            Scanner sc = new Scanner(System.in);
            System.out.println(“Enter grade:);
            char grade = sc.nextChar();
                if (grade == ‘A’)       
                System.out.println(“Very good”);
            else if (grade == ‘B’)
                System.out.println(“Good”);
            else if (grade == ‘C’)  
                System.out.println(“Fair”);
            else if (grade == ‘D’)
                System.out.println(“Bad”);
            else if (grade == ‘E’)
                System.out.println(“Very bad”);
            else    
                System.out.println(“No feedback ”);
        }       
    }

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

ตัวอย่างที่ 4.14 โปรแกรม ConditionEx14.java
    import java.util.Scanner;
    public class ConditionEx14  {
        public static void main (String args[])  {
            Scanner sc = new Scanner(System.in);
            System.out.println(“Enter grade:);
            char grade = sc.nextChar();
            switch(grade) { 
                    case ‘A’:       
                case ‘B’:   System.out.println(“Good”);
                            break;
                    case ‘C’:   System.out.println(“Fair”);
                case ‘D’:   System.out.println(“Bad”);
                            break;
                    case ‘E’:   System.out.println(“Very bad”);
                default:    System.out.println(“No feedback”);
            }
        }       
    }

ผลลัพธ์ของโปรแกรมจะขึ้นอยู่กับเกรดที่ผู้ใช้ป้อน ดังนี้

กรณีป้อนเกรดเป็น A

Enter grade: A

Good

อธิบายการทำงานได้ดังนี้ กรณีเกรดเท่ากับ A ไม่มีคำสั่งอื่นและไม่มีคำสั่ง break จึงมาทำคำสั่งในกรณีถัดไปคือกรณีเกรดเท่ากับ B แล้วเมื่อพบคำสั่ง break จึงจบการทำงานใน switch-case

กรณีป้อนเกรดเป็น B

Enter grade: B

Good

กรณีป้อนเกรดเป็น C

Enter grade: C

Fair

อธิบายการทำงานได้ดังนี้ กรณีเกรดเท่ากับ C พิมพ์ข้อความว่า Fair แต่ไม่มีคำสั่ง break จึงมาทำคำสั่งในกรณีถัดไปคือกรณีเกรดเท่ากับ D คือพิมพ์ข้อความว่า Bad แล้วเมื่อพบคำสั่ง break จึงจบการทำงานใน switch-case

กรณีป้อนเกรดเป็น D

Enter grade: D

Bad

กรณีป้อนเกรดเปEน E

Enter grade: E

Very bad

อธิบายการทำงานได้ดังนี้ กรณีเกรดเท่ากับ E พิมพ์ข้อความว่า Very bad แต่ไม่มีคำสั่ง break จึงมาทำคำสั่งในกรณี default คือพิมพ์ข้อความว่า No feedback จึงจบการทำงานใน switch-case

กรณีป้อนเกรดเป็น F (หรือค่าอื่น ๆ)

Enter grade: F

No feedback

คำสั่งที่อยู่ใน switch-case สามารถที่จะเป็นคำสั่งใดก็ได้ ดังตัวอย่างที่ 4.15 เป็นส่วนของโปรแกรมที่แสดงให้เห็นว่าในคำสั่ง switch-case สามารถมีคำสั่ง if-else ซ้อนอยู่ภายในได้

ตัวอย่างที่ 4.15
int k = 10;
int x = 2;       
switch(k) {          
    case 5:
    case 10:    if(x == 2)
                System.out.println(“case A1”);   
            else
                    System.out.println(“case A2”);   
            break;          
    case 15:
            System.out.println(“case B”);           
            break;          
    default: 
            System.out.println(“case default”);
}
ผลลัพธ์จากส่วนของโปรแกรมนี้ คือ

case A1

ตัวอย่างโปรแกรมแปลงหน่วยเงินโดยให้ผู้ใช้เลือกตัวเลือกชนิดของหน่วยเงินที่ต้องการแปลงและป้อนค่าเงินที่เป็นบาท เป็นดังตัวอย่างที่ 4.16

ตัวอย่างที่ 4.16
    import java.util.Scanner;
    public class Exchange  {
        public static void main (String[] args)  {
                Scanner sc = new Scanner(System.in);
            System.out.println("************************************* ");
            System.out.println("Select Choice for exchange : ");        
            System.out.println("**   1. US Dollar        **");           
                System.out.println("**   2. Euro               **");
                System.out.println("**   3. Yen                **");          
            System.out.println("************************************* ");           
            System.out.print("Select Choice : ");
            int choice = sc.nextInt();
                System.out.print("Enter money in Bath : ");
                double  money = sc.nextDouble();        
                switch(choice)  {
                case 1:
                    double rate1  = money/41.02;
                    System.out.println(money +" Bath =" + rate1 + " US Dollar");
                    break;
                case 2:
                    double  rate2 = money/48.14;
                        System.out.println(money +" Bath =" + rate2 + " Euro");     
                    break;
                case 3: 
                    double  rate3 = money/34.26;
                    System.out.println(money +" Bath =" + rate3 + " Yen");
                    break;
            default :        
            System.out.println(“Please select available choice.");
           }
       }
    }

4.6 แบบฝึกหัด

  1. ให้ใช้ส่วนของโปรแกรมต่อไปนี้เพื่อตอบคำถาม

ให้ใช้ส่วนของโปรแกรมต่อไปนี้ตอบคำถามข้อ 1.1 - 1.3

    if(a <= b)
        x = b – 10;
    else  {
        if (b >= 7)
            x = b + 10;
        else
            x = a + 10; 
    } 

1.1 หาค่า x ถ้ากำหนดให้ a = 7 และ b = 7 x = _______________

1.2 หาค่า x ถ้ากำหนดให้ a = 9 และ b = 8 x = _______________

1.3 หาค่า x ถ้ากำหนดให้ a = 7 และ b = 4 x = _______________

ใช้ส่วนของโปรแกรมต่อไปนี้ตอบคำถามข้อ 1.4 - 1.7

int a = 2;
int b = 9;
int c = 3;
if (x != z)
    c = a;  
else if (x <= y)
    c = 4;
else
    a = a * b;

if (x < y)
    c = a - 1;
int n = a + b + c;

1.4 หาค่าของ n เมื่อ x = 4, y = 4 และ z = 4 n = _______________

1.5 หาค่าของ n เมื่อ x = 8, y = 9 และ z = 8 n = _______________

1.6 หาค่าของ n เมื่อ x = 10, y = 6 และ z = 1 n = _______________

1.7 หาค่าของ n เมื่อ x = 4, y = 4 และ z = 1 n = _______________

ใช้ส่วนของโปรแกรมต่อไปนี้ตอบคำถามข้อ 1.8 - 1.12

   switch(answer)
   {
case 1:
         case 3:
         case 5:
         case 7:
         case 8:
            System.out.print(“Hello”);
         case 10:
         case 12:
             System.out.print(" Begin = " + answer);
             break;
            case 2:
              if (answer >=2 || y > 10)
                System.out.print(" Middle = " + answer);
              else
                System.out.print(" Middle = 0");
                
                break;
            case 4:
          case 6:
          case 9:
          case 11:
          
                System.out.println("Last = " + answer);
                break;
    default:
    
                 System.out.println("Default  answer = " + answer);
   }

1.8 ถ้า answer = 2 และ y = 18 ผลลัพธ์ของโปรแกรมคืออะไร
________________________________________________________________________

1.9 ถ้า answer = 15 และ y = 10 ผลลัพธ์ของโปรแกรมคืออะไร ________________________________________________________________________

1.10 ถ้า answer = 8 และ y = 8 ผลลัพธ์ของโปรแกรมคืออะไร
________________________________________________________________________

1.11 ถ้า answer = 3 และ y = 1 ผลลัพธ์ของโปรแกรมคืออะไร
________________________________________________________________________

1.12 ถ้า answer = 6 และ y = 8 ผลลัพธ์ของโปรแกรมคืออะไร
________________________________________________________________________

  1. ให้เขียนโปรแกรมเงินสำรองเลี้ยงชีพ (provident fund) ของบริษัทจาวาจาวาจำกัด โปรแกรมมีการรับข้อมูลเงินเดือน (salary) ของพนักงาน และรับค่าคอมมิชชั่น (commission) จากการขาย แล้วนำมาคำนวณหาเงินสำรองเลี้ยงชีพที่พนักงานต้องถูกหัก พนักงานขายจะมีรายรับ (income)

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

  • รายรับทั้งหมดไม่เกิน 10,000 บาท ยกเว้นไม่ต้องหักเงินสำรองเลี้ยงชีพ

  • รายรับทั้งหมดมากกว่า 10,000 บาท แต่ไม่เกิน 20,000 บาท หักเงินสำรองเลี้ยงชีพ 2% ของรายได้ทั้งหมด

  • รายรับทั้งหมดมากกว่า 20,000 บาทขึ้นไป หักเงินสำรองเลี้ยงชีพ 5% ของรายได้ทั้งหมด

การทำงานของโปรแกรมนี้จะมีการคำนวณหาเงินสำรองเลี้ยงชีพที่ต้องหัก และแสดงผลลัพธ์ของจำนวนเงินสำรองเลี้ยงชีพออกทางจอภาพ

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

  2. ให้เขียนโปรแกรมแสดงข้อความ “Enter day (1,2,3,4,5,6 or 7):” เพื่อรับค่าและแสดงข้อความตามเงื่อนไขดังต่อไปนี้

    • ถ้าผู้ใช้กด 1, โปรแกรมจะแสดงผล “Day = Monday”

    • ถ้าผู้ใช้กด 2, โปรแกรมจะแสดงผล “Day = Tuesday”

    • ถ้าผู้ใช้กด 3, โปรแกรมจะแสดงผล “Day = Wednesday”

    • ถ้าผู้ใช้กด 4, โปรแกรมจะแสดงผล “Day = Thursday”

    • ถ้าผู้ใช้กด 5, โปรแกรมจะแสดงผล “Day = Friday”

    • ถ้าผู้ใช้กด 6, โปรแกรมจะแสดงผล “Day = Saturday”

    • ถ้าผู้ใช้กด 7, โปรแกรมจะแสดงผล “Day = Sunday”

    • ถ้าผู้ใช้กดเลขอื่น ๆ ที่ไม่ใช่ 1,2,3,4,5,6, หรือ 7, โปรแกรมจะแสดงผล “Day = Wrong Day”

    4.1 ให้เขียนโปรแกรมโดยใช้คำสั่ง if-else

    4.2 ให้เขียนโปรแกรมโดยใช้คำสั่ง switch-case

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

ตัวอย่างผลลัพธ์ของโปรแกรมแบบที่ 1 เป็นดังนี้

Enter the first team: Brazil

Enter the second team: Costa Rica

Enter the first team score: 2

Enter the second team score: 0

Brazil wins over Costa Rica, 2-0.

ตัวอย่างผลลัพธ์ของโปรแกรมแบบที่ 2 เป็นดังนี้

Enter the first team: Japan

Enter the second team: Senegal

Enter the first team score: 2

Enter the second team score: 2

Japan draws with Senegal, 2-2.

ตัวอย่างผลลัพธ์ของโปรแกรมแบบที่ 3 เป็นดังนี้

Enter the first team: Argentina

Enter the second team: Croatia

Enter the first team score: 0

Enter the second team score: 3

Argentina loses to Croatia, 0-3.

  1. ให้เขียนโปรแกรมเพื่อรับค่าตัวเลขจำนวนเต็ม 2 จำนวน และตัวเลือกของการดำเนินการ แล้วนำมาเก็บในตัวแปร num1, num2 และ choice โดยมีการดำเนินการดังนี้

    • ถ้าผู้ใช้กดเครื่องหมาย + โปรแกรมจะนำตัวเลขทั้งสองตัวมาบวกกัน และแสดงผลบวก

    • ถ้าผู้ใช้กดเครื่องหมาย - โปรแกรมจะนำตัวเลขทั้งสองตัวมาลบกัน และแสดงผลลบ

    • ถ้าผู้ใช้กดเครื่องหมาย * โปรแกรมจะนำตัวเลขทั้งสองตัวมาคูณกัน และแสดงผลคูณ

    • ถ้าผู้ใช้กดเครื่องหมาย / โปรแกรมจะนำตัวเลขทั้งสองตัวมาหารกัน และแสดงผลหาร

    • ถ้าผู้ใช้กดเครื่องหมาย > โปรแกรมจะนำตัวเลขทั้งสองตัวมาเปรียบเทียบว่า num1 มากกว่า num2 หรือไม่ แล้วแสดงผลการเปรียบเทียบ

    • ถ้าผู้ใช้กดตัวอักษรอื่น ๆ ที่ไม่ใช่ +, -, *, /, หรือ > โปรแกรมจะแสดงผลข้อความว่า Wrong Choice

ตัวอย่างผลลัพธ์ของโปรแกรมเมื่อผู้ใช้กด + เป็นดังนี้

Enter number 1: 9

Enter choice (+, -, *, /, or >): +

Enter number 2: 2

9 + 2 = 11

ตัวอย่างผลลัพธ์ของโปรแกรมเมื่อผู้ใช้กด - เป็นดังนี้

Enter number 1: 9

Enter choice (+, -, *, /, or >): -

Enter number 2: 2

9 - 2 = 7

ตัวอย่างผลลัพธ์ของโปรแกรมเมื่อผู้ใช้กด * เป็นดังนี้

Enter number 1: 9

Enter choice (+, -, , /, or >):

Enter number 2: 2

9 * 2 = 18

ตัวอย่างผลลัพธ์ของโปรแกรมเมื่อผู้ใช้กด / เป็นดังนี้

Enter number 1: 9

Enter choice (+, -, *, /, or >): /

Enter number 2: 2

9 / 2 = 4.5

ตัวอย่างผลลัพธ์ของโปรแกรมเมื่อผู้ใช้กด > เป็นดังนี้

Enter number 1: 9

Enter choice (+, -, *, /, or >): >

Enter number 2: 2

9 > 2 = true

ตัวอย่างผลลัพธ์ของโปรแกรมเมื่อผู้ใช้กดตัวอักษรอื่น ๆ เป็นดังนี้

Enter number 1: 9

Enter choice (+, -, *, /, or >): A

Enter number 2: 2

Wrong Choice