Control Structure
1. กลุ่มคำ สั่ง Selection
1.1 คำ สั่ง if
เป็นคำ สั่งที่ใช้ในการตรวจสอบเงื่อนไขว่าเป็นจริงหรือเท็จ โดยถ้าเป็นจริงจะให้ทำ งานใด
และถ้าเป็นเท็จจะให้ทำ งานใด แบ่งออกเป็น 4 แบบ คือ แบบเงื่อนไขเดียว (Simple IF), แบบ 2
เงื่อนไข (IF..ELSE), แบบซ้อน (Nested IF) และ แบบลัด (shortcut if)
1.1.1 แบบเงื่อนไขเดียว (Simple IF)
มีรูปแบบดังนี้
if (เงื่อนไข)
{ คำ สั่งต่าง ๆ เมื่อเงื่อนไขเป็นจริง ;}
. . .
ตัวอย่างที่ 1
if (radius >= 0)
{ area = radius * radius * PI;
System.out.println (“พื้นที่วงกลมคือ” + area);}
คำ อธิบาย
ถ้าค่ารัศมี (Radius) มีค่ามากกว่าหรือเท่ากับ 0 (นั่นคือ ไม่เป็นค่าลบ) ให้คำ นวณหาพื้นที่
ของวงกลม โดยใช้สูตรแล้วแสดงผลลัพธ์ออกมาที่จอภาพ แต่ถ้าค่ารัศมีมีค่า < 0 ให้ไปทำ งานที่คำ
สั่งที่อยู่ต่อจาก } ของคำ สั่ง if
ตัวอย่างที่ 2
if (i >=0) && (i <=10))
System.out.println (“i เป็นตัวเลขที่อยู่ระหว่าง 0 ถึง 10”);
if (เงื่อนไข)
{ คำ สั่งต่าง ๆ เมื่อเงื่อนไขเป็นจริง ;}
. . .
if (radius >= 0)
{ area = radius * radius * PI;
System.out.println (“พื้นที่วงกลมคือ” + area);}
if (i >=0) && (i <=10))
System.out.println (“i เป็นตัวเลขที่อยู่ระหว่าง 0 ถึง 10”);
บทที่ 7 Control Structure 60
คำ อธิบาย
ในกรณีนี้มีเพียงคำ สั่งเดียวที่ต้องการทำ กรณีที่เงื่อนไขเป็นจริง ดังนั้นจึงไม่จำ เป็นต้องใส่
เครื่องหมายวงเล็บปีกกาปิดและเปิดก็ได้
ตัวอย่างที่ 3
if (sex == “m” || sex == “M”)
return height – 100;
คำ อธิบาย
ถ้าเป็นเพศชาย (M หรือ m) ให้ส่งค่านํ้าหนักกลับไป โดยคำ นวณนํ้าหนักจากความสูง
(height) ลบด้วย 100
1.1.2 แบบมี 2 เงื่อนไข (if…else)
ใช้ในกรณีที่มี 2 เงื่อนไข คือ ถ้าเงื่อนไขเป็นจริง ให้ทำ งานหนึ่ง ถ้าเป็นเท็จให้ทำ งานอีกงาน
หนึ่ง
รูปแบบ
if (เงื่อนไข)
{ คำ สั่งต่าง ๆ เมื่อเงื่อนไขเป็นจริง ;}
else
{ คำ สั่งต่าง ๆ เมื่อเงื่อนไขเป็นเท็จ ;}
ตัวอย่างที่ 4
if (radius >= 0)
{ area = radius * radius * PI;
System.out.println (“พื้นที่วงกลมคือ” + area);}
else
{System.out.println (“ตัวเลขเป็นค่าลบไม่ได้ – กรุณาป้อนใหม่”);}
if (sex == “m” || sex == “M”)
return height – 100;
if (เงื่อนไข)
{ คำ สั่งต่าง ๆ เมื่อเงื่อนไขเป็นจริง ;}
else
{ คำ สั่งต่าง ๆ เมื่อเงื่อนไขเป็นเท็จ ;}
if (radius >= 0)
{ area = radius * radius * PI;
System.out.println (“พื้นที่วงกลมคือ” + area);}
else
{System.out.println (“ตัวเลขเป็นค่าลบไม่ได้ – กรุณาป้อนใหม่”);}
เรียบเรียงโดย อ.พิเชษฐ์ ศิริรัตนไพศาลกุล 61
คำ อธิบาย
ถ้าค่ารัศมีเป็นค่าที่มากกว่าหรือเท่ากับ 0 ให้คำ นวณหาพื้นที่วงกลม แล้วแสดงผลลัพธ์ทาง
จอภาพ แต่ถ้าเป็นค่าลบ ให้แสดงข้อความแจ้งมาที่จอภาพด้วย ในที่นี้คำ สั่งหลัง else มีเพียงคำ สั่ง
เดียว ดังนั้นอาจไม่ใส่เครื่องหมาย ปีกกา { และ } ก็ได้
ตัวอย่างที่ 5
if (sex == “M”) || sex == “m”)
return height – 100;
else
return height – 110;
คำ อธิบาย
ถ้าเป็นเพศชายให้มีค่านํ้าหนักเป็น (ความสูง – 100) แต่ถ้าเป็นเพศอื่น ๆ ให้กำ หนดค่านํ้า
หนักจากความสูงลบด้วย 110
1.1.3 แบบซ้อน (Nested if)
ใช้ในกรณีที่ต้องการตรวจสอบเงื่อนไขของ if ให้มากยิ่งขึ้น
รูปแบบที่ 1
if (sex == “M”) || sex == “m”)
return height – 100;
else
return height – 110;
if (เงื่อนไขที่ 1)
{ if (เงื่อนไขที่ 2)
{ (เงื่อนไขที่ 3)
...
}
}
else
{ คำ สั่งต่าง ๆ เมื่อเงื่อนไขเป็นเท็จ; }
บทที่ 7 Control Structure 62
ตัวอย่างที่ 6 แสดงการทำ งานของรูปแบบที่ 1
if (i > k)
{ if (j > k)
System.out.println(“i และ j มีค่ามากกว่า k”);
}
else
System.out.println(“I มีค่าน้อยกว่าหรือเท่ากับ k”);
คำ อธิบาย
จะเปรียบเทียบเงื่อนไขแรกก่อนคือ (i > k) ถ้าเงื่อนไขนี้เป็นเท็จ ก็จะกระโดดมาทำ งานที่
หลังคำ สั่ง else ทันที คือพิมพ์ข้อความว่า “i มีค่าน้อยกว่าหรือเท่ากับ k” แต่ถ้าเงื่อนไขแรกเป็นจริง
ให้ตรวจสอบต่อไปในเงื่อนไขที่ 2 ว่า (j > k) หรือไม่ ถ้า (j > k) เป็นจริง ให้พิมพ์ข้อความว่า “i และ j
มีค่ามากกว่า k” แต่ถ้าเป็นเท็จก็จะออกจากการทำ งานของคำ สั่ง if นี้ไป (ไม่ไปทำ ที่คำ สั่งหลัง else
เนื่องจากเป็น else ของ if ในเงื่อนไขแรก)
รูปแบบที่ 2
if (เงื่อนไขที่ 1)
{ คำ สั่งเมื่อเงื่อนไขที่ 1 เป็นจริง ;}
else
if (เงื่อนไขที่ 2)
{ คำ สั่งเมื่อเงื่อนไขที่ 2 เป็นจริง ;}
else
if (เงื่อนไขที่ 3)
{ คำ สั่งเมื่อเงื่อนไขที่ 3 เป็นจริง ;}
if (i > k)
{ if (j > k)
System.out.println(“i และ j มีค่ามากกว่า k”);
}
else
System.out.println(“I มีค่าน้อยกว่าหรือเท่ากับ k”);
if (เงื่อนไขที่ 1)
{ คำ สั่งเมื่อเงื่อนไขที่ 1 เป็นจริง ;}
else
if (เงื่อนไขที่ 2)
{ คำ สั่งเมื่อเงื่อนไขที่ 2 เป็นจริง ;}
else
if (เงื่อนไขที่ 3)
{ คำ สั่งเมื่อเงื่อนไขที่ 3 เป็นจริง ;}
...
ตัวอย่างที่ 7 แสดงการทำ งานของรูปแบบที่ 2
if (score >= 80.0)
grade = “A”;
else
if (score >= 70)
grade = “B”;
else
if (score >= 60)
grade = “C”;
else
if (score >= 50)
grade = “D”;
else
grade = “F”;
คำ อธิบาย
เป็นการตรวจสอบคะแนนในแต่ละระดับ ถ้าตรงตามเงื่อนไขก็จะได้เกรดตามนั้น (ถ้าได้
เกรดใดแล้ว ก็จะหลุดออกจากคำ สั่ง if ทั้งหมดทันที)
1.1.4 แบบลัด (shortcut if)
เป็นคำ สั่งที่ใช้ทำ ให้การเขียนคำ สั่ง if สั้นลง แต่ใช้ได้เฉพาะกับ if ที่เป็นแบบ 2 เงื่อนไข
(if…else) เท่านั้น รูปแบบของการใช้ shortcut if คือ
ตัวแปร = (เงื่อนไข) ? ค่าหรือคำ สั่งเมื่อเงื่อนไขเป็นจริง : ค่าหรือคำ สั่งเมื่อเงื่อนไขเป็นเท็จ
เช่น
if (X > 0) Y = 1 // เป็นการหาค่า Y โดยใช้เงื่อนไข (X > 0) โดย
else Y = -1 ; // ถ้าเงื่อนไขเป็นจริง จะได้ Y = 1 แต่ถ้าเงื่อนไขเป็นเท็จ จะได้ Y = -1
สามารถเขียนให้สั้นลงได้ดังนี้
Y = (X > 0) ? 1 : -1 // ถ้า X > 0 เป็นจริง ให้เก็บค่า 1 ไว้ที่ Y
// แต่ถ้าเป็นเท็จ ให้เก็บค่า –1 ไว้ที่ Y
ตัวอย่างที่ 8 การใช้ ? เพื่อหาค่า Absolute (แปลงค่าบวกหรือลบให้เป็นค่าบวกเท่านั้น)
class Ternary {
public static void main (String args[]) {
int i, k ;
i= 10;
k = i < 10 ? -i : i; // หาค่า Absolute ของ i
System.out.print ("Absolute ของตัวเลข : ");
System.out.println (i + " คือ " + k) ;
i = -10 ;
k = i < 10 ? -i : i; // หาค่า Absolute ของ i
System.out.print ("Absolute ของตัวเลข : ");
System.out.println (i + " คือ " + k) ;
}
} // Ternary
1.2 คำ สั่ง Switch
เป็นการตรวจสอบเงื่อนไขโดยดูจากค่าตัวแปร ทั้งนี้การใช้ Switch จะใช้ได้กับตัวแปรที่เป็น
ตัวเลขเท่านั้น
รูปแบบ
Switch (ตัวแปร)
{ case ค่าที่ 1 : คำ สั่งที่ 1 ;
break;
case ค่าที่ 2 : คำ สั่งที่ 2 ;
break;
...
case ค่าที่ N : คำ สั่งที่ N;
break;
default : คำ สั่งเมื่อไม่มีค่าที่ตรงกับที่ระบุใน case ;
}
ตัวอย่างที่ 9 สมมติธนาคารคิดดอกเบี้ยตามระยะเวลาการกู้ โดยแบ่งเป็น 3 กลุ่มคือ
กลุม่ ที่ 1 ระยะเวลากู้ไม่เกิน 5 ปี คิดดอกเบี้ย 12%
กลุ่มที่ 2 ระยะเวลากู้ไม่เกิน 15 ปี คิดดอกเบี้ย 18%
กลุ่มที่ 3 ระยะเวลากู้ไม่เกิน 30 ปี คิดดอกเบี้ย 24%
สามารถใช้คำ สั่ง Switch เพื่อตรวจสอบเงื่อนไขข้างต้นได้ดังนี้
Switch (ตัวแปร)
Switch (year)
{ case 5 : IRate = 12;
break;
case 15 : Irate = 18;
break;
case 30 : Irate = 24;
break;
default : System.out.println (“ตัวเลขผิด ต้องเป็น 5, 15 หรือ 30 เท่านั้น โปรดป้อนใหม่อีกครั้ง”);
}
ข้อจำ กัดของการใช้คำ สั่ง Switch
• ตัวแปรที่ใช้ในการตรวจสอบ จะต้องมีชนิดเป็นตตัวเลขอย่างใดอย่างหนึ่ง ได้แก่ char, byte,
short หรือ int และต้องอยู่ภายในเครื่องหมายวงเล็บ ( ) เท่านั้น
• ชนิดของตัวเลขที่ใช้ในการตรวจสอบในคำ สั่ง case จะต้องเป็นชนิดเดียวกันทั้งหมด
• อาจไม่ใส่คำ สั่ง break ไว้ก็ได้ แต่ถ้าไม่ใส่ จะทำ ให้โปรแกรมต้องตรวจสอบทุก ๆ เงื่อนไขจน
กว่าจะหมด ซึ่งอาจทำ ให้เสียเวลาได้ ถ้าเงื่อนไขมีมากและซับซ้อน
• คำ สั่ง default อาจใส่หรือไม่ก็ได้ ถ้าใส่ก็จะนิยมวางไว้ที่บรรทัดสุดท้ายของการตรวจสอบ
2. กลุ่มคำ สั่ง Iteration
2.1 คำ สั่ง While
รูปแบบ
while (เงื่อนไข)
{ คำ สั่งเมื่อเงื่อนไขเป็นจริง ; }
คำ อธิบาย
ตราบใดที่เงื่อนไขยังคงเป็นจริงอยู่ก็จะทำ คำ สั่งที่อยู่ภายในคำ สั่ง while ไปเรื่อย ๆ จนกว่า
เมื่อตรวจสอบเงื่อนไขแล้วว่าเป็นเท็จ จึงจะกระโดดออกมาทำ งานที่คำ สั่งถัดไปที่อยู่นอก loop ของ
คำ สั่ง while
ตัวอย่างที่ 10 แสดงการใช้คำ สั่ง While
public class TestWhile {
public static void main(String args[]){
float Number = 2000 ;
int TimesMoved = 0 ;
while (Number >= 1.0)
{ Number *=0.1 ;
TimesMoved++ ;
}
System.out.println ("Number : "+Number) ;
System.out.println ("Times : "+TimesMoved) ;
}
} // TestWhile
2.2 คำ สั่ง Do..While
รูปแบบ
Do
{
คำ สั่งต่าง ๆ
}
while (เงื่อนไข)
คำ อธิบาย
โปรแกรมจะทำ งานตามคำ สั่งต่าง ๆ ก่อน เมื่อทำ เสร็จจึงจะมาตรวจสอบเงื่อนไขที่คำ สั่ง
While ถ้าเงื่อนไขเป็นจริง ก็จะวนกลับขึ้นไปทำ งานที่คำ สั่งต่าง ๆ ใหม่ แต่ถ้าไม่เป็นจริงก็จะหลุด
ออกมาทำ งานที่คำ สั่งต่อไป
ตัวอย่างที่ 11 แสดงการใช้คำ สั่ง Do..While
public class Testdo
{public static void main (String args[])
{int data = 0;
int sum = 0;
do
{ data = data+1;
sum += data ;
}
while (data <=10) ;
System.out.println ("ผลรวมคือ : " + sum) ;
}
} // Testdo
2.3 คำ สั่ง For
เป็นคำ สั่งที่ใช้ในการตรวจสอบเงื่อนไข พร้อมทั้งกำ หนดค่าเริ่มต้นและการเปลี่ยนแปลง
ของค่าเริ่มต้นไปพร้อม ๆ กัน โดยตราบใดที่เงื่อนไขในคำ สั่ง for เป็นจริง ก็จะทำ งานตามคำ สั่งที่
แสดงไว้ภายในคำ สั่ง for ต่อไป
รูปแบบ
For (ค่าตัวแปรเริ่มต้น ; เงื่อนไข ; เปลี่ยนแปลงค่าตัวแปร)
ตัวอย่างที่ 12
int i;
for (i = 0; i < 100 ; i++)
{ System.out.println (“Warm Welcome”); }
คำ อธิบาย
1. เริ่มต้น จะกำ หนดค่า i ให้เป็น 0
2. จะตรวจสอบว่า i < 100 หรือไม่ ถ้าเป็นจริง (เริ่มต้นจะเป็นจริงแน่นอน เพราะ i =0) ก็จะแสดง
ข้อความว่า “Warm Welcome” เสร็จแล้ว จะเพิ่มค่า i ขึ้น 1 ดังนั้นในรอบที่ 2 ค่า i จะกลาย
เป็น 1
3. ย้อนกลับไปทำ งานตามข้อ 2 ใหม่ จนกว่าค่า i >= 100 ซึ่งจะไปทำ งานที่คำ สั่งอื่นต่อไป
3. Break และ Continue
Break และ Continue เป็นคำ สั่งที่นำ มาใช้ร่วมกับกลุ่มคำ สั่ง Iteration เพื่อให้หลุดออก
จาก Loop หรือ ทำ งานต่อไปภายใน Loop
• Break ถ้าโปรแกรมพบคำ สั่งนี้ จะทำ หลุดออกจาก Loop การทำ งานทันที
• Continue ถ้าโปรแกรมพบคำ สั่งนี้ จะทำ ให้หยุดการทำ งานที่จุดนั้น แล้วย้อนกลับไปเริ่มต้น
การทำ งานที่ต้น Loop ใหม่
ตัวอย่างที่ 13
int Number = 0;
while (1 <2)
{ Number = Number + 1;
if (Number == 10)
{ System.out.println(“จบการทำ งาน”);
break; }
if (Number > 0 && Number <= 9)
{ System.out.println(“ตัวเลข” + Number);
continue; }
}
คำ อธิบาย
ค่าของตัวแปร Number จะเพิ่มขึ้นทีละ 1 โดยเริ่มต้นจากค่า 0 ถ้าอยู่ระหว่าง 1 และ 9 ก็
จะแสดงข้อความว่าเป็นตัวเลขอะไรมาให้บนจอภาพ แล้วย้อนกลับไปเพิ่มค่าตัวเลขจนกระทั่งถึง
ค่า 10 ก็จะหลุดออกจาก while loop
4. ประยุกต์ใช้งาน
ตัวอย่างที่ 14 การใช้ if-else-if เพื่อตรวจสอบเงื่อนไขของเดือนต่าง ๆ
// การใช้ if-else-if
import java.io.*;
public class ifElse{
public static void main (String args[]) throws IOException{
BufferedReader stdin = new BufferedReader(new InputStreamReader
(System.in));
System.out.println("ต้องการทราบข้อมูลของเดือนใด (1 - 12) ");
String input = " ";
input = stdin.readLine();
int month = Integer.parseInt(input);
String season;
if (month ==1 || month ==2 || month==3)
season = "ร้อนปานกลาง";
else if (month ==4 || month ==5 || month==6)
season = "ร้อนมาก";
else if (month ==7 || month ==8 || month==9)
season = "ฝนตก ชุกถึงชุกมาก";
else if (month ==10 || month ==11 || month==12)
season = "ร้อนเล็กน้อย";
else
season = "ผิดพลาด";
System.out.println ("เดือน " + month + " มีอากาศแบบ " + season );
}
} // ifElse
c:\jav>javac ifElse.java
c:\jav>java ifElse
ต้องการทราบข้อมูลของเดือนใด (1 – 12)
2
เดือน 2 มีอากาศแบบ ร้อนปานกลาง
c:\jav>java ifElse
ต้องการทราบข้อมูลของเดือนใด (1 – 12)
123
เดือน 123 มีอากาศแบบ ผิดพลาด
คำ อธิบาย
1. ป้อนตัวเลขของเดือนที่ต้องการขอดูข้อมูล โดยป้อนมาเป็นตัวเลขระหว่าง 1 ถึง 12 เท่านั้น
2. ตรวจสอบค่าของ month ว่าตรงกับเงื่อนไขใด ก็จะได้ค่าของ season มาก ถ้าไม่ตรงจะแสดง
ข้อความผิดพลาดมาให้ว่า “ผิดพลาด”
3. แสดงค่าของ season ออกมาทางจอภาพด้วยคำ สั่ง println
ตัวอย่างที่ 15 การใช้ Switch เพื่อตรวจสอบเงื่อนไขร่วมกับคำ สั่งBreak
mport java.io.*;
public class SwitchSample {
public static void main (String args[]) {
for (int i=0; i<6; i++)
switch (i) {
case 0:
System.out.println ("I มีค่าเป็นศูนย์");
break;
case 1:
System.out.println ("I มีค่าเป็นหนึ่ง");
break;
case 2:
System.out.println ("I มีค่าเป็นสอง");
break;
case 3:
System.out.println ("I มีค่าเป็นสาม");
break;
default:
System.out.println ("I มีค่ามากกว่าสาม");
}
}
}
c:\jav>javac SwitchSample.java
c:\jav>java SwitchSample
I มีค่าเป็นศูนย์
I มีค่าเป็นหนึ่ง
I มีค่าเป็นสอง
I มีค่าเป็นสาม
I มีค่ามากกว่าสาม
I มีค่ามากกว่าสาม
ตัวอย่างที่ 16 กรณีที่ต้องการใช้คำ สั่ง switch ตรวจสอบเงื่อนไข โดยไม่ใช้คำ สั่ง break ในทุก
case ทั้งนี้เพื่อตรวจสอบเป็นช่วง ๆ
// แก้ไขโปรแกรม ifElse โดยเปลี่ยนไปใช้คำ สั่ง switch
import java.io.*;
public class Switch {
public static void main (String args[]) throws IOException{
BufferedReader stdin = new BufferedReader(new InputStreamReader
(System.in));
System.out.println("ต้องการทราบข้อมูลของเดือนใด (1 - 12) ");
String input = " ";
input = stdin.readLine();
int month = Integer.parseInt(input);
String season;
switch (month){
case 1: // ถ้าค่าของ month เป็น 1, 2 หรือ 3
case 2:
case 3:
season = "ร้อนปานกลาง";
break;
case 4: // ถ้าค่าของ month เป็น 4, 5 หรือ 6
case 5:
case 6:
season = "ร้อนมาก";
break;
case 7: // ถ้าค่าของ month เป็น 7, 8 หรือ 9
case 8:
case 9:
season = "ฝนตกชุกถึงชุกมาก";
break;
case 10:// ถ้าค่าของ month เป็น 10, 11 หรือ 12
case 11:
case 12:
season = "ร้อนเล็กน้อย";
default: // ถ้าไม่เป็นค่า 1, 2, … หรือ 12
season = "ผิดพลาด";
}
System.out.println ("เดือน " + month + " มีอากาศแบบ " + season);
}
} // Switch
c:\jav>javac ifElse.java
c:\jav>java ifElse
ต้องการทราบข้อมูลของเดือนใด (1 – 12)
9
เดือน 9 มีอากาศแบบ ฝนตกชุกถึงชุกมาก
ไม่มีความคิดเห็น:
แสดงความคิดเห็น