12. บทที่ 3 คําสั่งควบคุมการทํางาน หนาที่ 77
เอกสารประกอบการสอน 305272 การเขียนโปรแกรมคอมพิวเตอรขั้นสูง
อ.สุรางคนา ระวังยศ
Variable or Expression
- ใชไดเฉพาะตัวแปรที่เปนชนิดขอมูล char, byte, short และ int
Constant Expression
- จะตองเปนคาคงตัว(Literal)เทานั้น ถาเปนตัวแปรตองเปน final (ศึกษาเพิ่มเติมในบทที่ 9)
- เปนคาคงตัวที่มีชนิดขอมูลที่สอดคลองกับ Variable หรือ Expression และสามารถมีไดคาเดียว
ในหนึ่ง Constant Expression
- คาแตละ Constant Expression จะตองไมซ้ํากัน
หลักการทํางาน นําคาของ Variable or Expression ไปเปรียบเทียบกับคาของ Constant
Expression ที่มีทั้งหมด ถาตรงกับ Constant Expression ตัวใดก็จะเลือกที่จะทํางานใน Constant
Expression นั้นจนพบกับคําสั่ง break หรือจบรูปแบบของคําสั่ง switch แตถาไมตรงกับ Constant
Expression ใดเลยแลวมี default อยูก็จะทํางานใน default จนพบกับคําสั่ง break หรือจบรูปแบบของคําสั่ง
switch
หมายเหตุ คําสั่ง break จะทําใหโปรแกรมกระโดดออกไปทํางานนอกคําสั่ง switch
ตัวอยาง การใช Switch
public class SwitchDemo1 {
public static void main (String args[]) {
for (int i=0; i<6; i++)
switch (i) {
case 0:
System.out.println ("I = 0");
break;
case 1:
System.out.println ("I = 1");
break;
case 2:
System.out.println ("I = 2");
break;
case 3:
System.out.println ("I = 3");
break;
default:
System.out.println ("I > 3");
}
}}
13. บทที่ 3 คําสั่งควบคุมการทํางาน หนาที่ 78
เอกสารประกอบการสอน 305272 การเขียนโปรแกรมคอมพิวเตอรขั้นสูง
อ.สุรางคนา ระวังยศ
ผลลัพธที่ไดคือ
I = 0
I =1
I = 2
I= 3
I > 3
I > 3
ตัวอยาง
public class SwitchDemo2 {
public static void main(String[] args) {
int month = 8;
switch (month) {
case 1: System.out.println("January");
break;
case 2: System.out.println("February");
break;
case 3: System.out.println("March");
break;
case 4: System.out.println("April");
break;
case 5: System.out.println("May");
break;
case 6: System.out.println("June");
break;
case 7: System.out.println("July");
break;
case 8: System.out.println("August");
break;
case 9: System.out.println("September");
break;
case 10: System.out.println("October");
break;
case 11: System.out.println("November");
break;
case 12: System.out.println("December");
break;
}
} }
ผลลัพธที่ไดคือ
August
14. บทที่ 3 คําสั่งควบคุมการทํางาน หนาที่ 79
เอกสารประกอบการสอน 305272 การเขียนโปรแกรมคอมพิวเตอรขั้นสูง
อ.สุรางคนา ระวังยศ
ตัวอยาง
class SwitchDemo{
public static void main(String args[]){
int rate=0;
int year =0;
switch (year){
case 5: rate = 12;
break;
case 15 :rate =18;
break;
case 30 : rate = 24;
break;
default : System.out.println("");}
}
}
ตัวอยาง
public class SwitchDemo3 {
public static void main(String[] args) {
int month = 2;
int year = 2000;
int numDays = 0;
switch (month) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
numDays = 31;
break;
case 4:
case 6:
case 9:
case 11:
numDays = 30;
break;
case 2:
if(((year % 4 == 0) &&!(year % 100 == 0)) || (year % 400 == 0))
numDays = 29;
else
numDays = 28;
break;
15. บทที่ 3 คําสั่งควบคุมการทํางาน หนาที่ 80
เอกสารประกอบการสอน 305272 การเขียนโปรแกรมคอมพิวเตอรขั้นสูง
อ.สุรางคนา ระวังยศ
}
System.out.println("Number of Days = " + numDays);
}
}
จะเห็นวาทุกหัวขอที่เลือกทุกแนวทางจะมี breakผิดพลาด! ไมไดกําหนดที่คั่นหนา เพื่อใหออก
จาก switch และ default เปนหัวขอที่กําหนดไวในกรณีที่ผูใชโปรแกรมเลือกแบบอื่น ๆ ที่ ไมไดกําหนด
ไวกอน
ขอจํากัดของการใชคําสั่ง Switch
• ตัวแปรที่ใชในการตรวจสอบ จะตองมีชนิดเปนตัวเลขอยางใดอยางหนึ่ง ไดแก char, byte, short
หรือ int และตองอยูภายในเครื่องหมายวงเล็บ () เทานั้น
• ชนิดของตัวเลขที่ใชในการตรวจสอบในคําสั่ง case จะตองเปนชนิดเดียวกันหมด
• อาจไมใสคําสั่ง break ไวก็ได แตถาไมใส จะทําใหโปรแกรมตองตรวจสอบทุก ๆ เงื่อนไข
จนกวาจะหมดซึ่งอาจทําใหเสียเวลาได ถาเงื่อนไขมีมากและซับซอน
• คําสั่ง default อาจใสหรือไมใสก็ได ถาใสก็จะนิยมวางไวที่บรรทัดสุดทายของการตรวจสอบ
ตัวอยาง การใช Expression ใน Variable or Expression และ คําสั่ง break
String x = “xyz”;
switch ( x.length() - 1 ) {
// x.length() เปนการเรียก method ที่คืนคาความยาวของขอความตัวแปร x ในที่นี้ x.length() = 3
case 1:
System.out.println(“length is one”);
break;
case 2:
System.out.println(“length is two”);
break;
case 3:
System.out.println(“length is three”);
break;
default:
System.out.println(“on match”);
}
ผลลัพธที่ไดคือ
length is two
16. บทที่ 3 คําสั่งควบคุมการทํางาน หนาที่ 81
เอกสารประกอบการสอน 305272 การเขียนโปรแกรมคอมพิวเตอรขั้นสูง
อ.สุรางคนา ระวังยศ
ตัวอยาง การใช Variable or Expression
Integer in = new Integer(3);
switch(in) {
case 1 :
System.out.println(“1”);
break;
case 2 :
System.out.println(“2”);
break;
case 3:
System.out.println(“3”);
break;
}
ผลลัพธที่ได : Compiled Error
เนื่องจาก Variable or Expression ตองเปนตัวแปรชนิดขอมูล char, byte, shor และ int
เทานั้น แตในตัวอยางนี้ใชตัวแปรกลุม wrapper class (Integer) ซึ่งจะไดเรียนในบทที่ 11 จึงทําใหเกิด
ขอผิดพลาดในการคอมไพล
ตัวอยาง การใชตัวแปรแบบ final (กําหนดใหเปนตัวแปรคงที่ในภาษาจาวา)ใน Constant Expression
final int one = 1;
final int two = 2;
int x = 1;
switch (x) {
case one: System.out.println("one");
break;
case two: System.out.println("two");
break;
case two + 1: System.out.println("two plus one");
break;
}
ผลลัพธที่ได
one
เนื่องจาก one และ two เปนตัวแปรชนิด final ทําใหทั้งสองตัวแปรเปนคาคงที่ ซึ่งจะไดกลาว
อยางละเอียดในบทที่ 9 ตัวแปร final
18. บทที่ 3 คําสั่งควบคุมการทํางาน หนาที่ 83
เอกสารประกอบการสอน 305272 การเขียนโปรแกรมคอมพิวเตอรขั้นสูง
อ.สุรางคนา ระวังยศ
ตัวอยาง การใช switch
int x = 1;
switch(x) {
case 1: System.out.println("x is one");
case 2: System.out.println("x is two");
case 3: System.out.println("x is three");
}
System.out.println("out of the switch");
ผลลัพธที่ไดคือ
x is one
x is two
x is three
out of the switch
ตัวอยาง การใช switch
int x = 5;
switch (x) {
case 2: System.out.println(“2”);
default: System.out.println(“default”);
case 3: System.out.println(“3”);
case 4: System.out.println(“4”);
}
ผลลัพธที่ไดคือ
default
3
4
คําสั่งควบคุมการวนลูป (Loop Statements)
เปนกลุมคําสั่งที่ใชในการวนรอบ(loop) การทํางานไปเรื่อยๆ จนกวาเงื่อนไขที่กําหนดไวจะเปน
จริง จึงจะหลุดออกจากวงโคจรการวนรอบนี้ได คําสั่งในกลุมนี้ ไดแก
• คําสั่ง while
• คําสั่ง do … while
• คําสั่ง for
• คําสั่ง break และ continue
19. บทที่ 3 คําสั่งควบคุมการทํางาน หนาที่ 84
เอกสารประกอบการสอน 305272 การเขียนโปรแกรมคอมพิวเตอรขั้นสูง
อ.สุรางคนา ระวังยศ
คําสั่งแบบ while
ใชคําสั่ง while เมื่อเงื่อนไขเปนจริง จะทําคําสั่งตางๆ ใน loop ไปเรื่อยๆ จนกวาเมื่อตรวจพบวา
เงื่อนไขเปนเท็จ จึงกระโดดออกมาทํางานที่คําสั่งถัดไปที่อยูนอก loop ของคําสั่ง while โดยที่ตรวจสอบ
กอนแลวจึงทํางาน (loop) การวนนี้จะใชการวน มากกวา หนึ่งครั้ง หรือ ไมวนเลยก็ได ถาเงื่อนไขเปนเท็จ
รูปแบบการใช while มีโครงสรางดังนี้:
Boolean Expression
- ตองมีผลลัพธเปนชนิดขอมูล Boolean เทานั้น
หลักการทํางาน
1. Boolean Expression เปนจริงทํางานตอ ถาเปนเท็จจบการทํางาน
2. ทํางานใน Block
3. กลับไปทําขั้นตอนที่ 1
ตัวอยาง การทดลองบวกเลข 1 ถึง 100
class WhileDemo1 {
public static void main (String[] args) {
int x = 1;
int total = 0;
while (x <= 100) {
total += x;
x = x + 1;
}
System.out.println (“The series from 1 to 100 is “ + total);
}
}
ผลลัพธที่ไดคือ
The series from 1 to 100 is 5050
while ( Boolean Expression ) [{]
[statements]
[}]
20. บทที่ 3 คําสั่งควบคุมการทํางาน หนาที่ 85
เอกสารประกอบการสอน 305272 การเขียนโปรแกรมคอมพิวเตอรขั้นสูง
อ.สุรางคนา ระวังยศ
ตัวอยาง ทดลองสรางโปรแกรมทําการบวกเลขแบบอนุกรมจาก x ถึง y โดยที่ x และ y เปนเลข
Integer ใด ๆ ที่รับจาก user เขามา เขียนแลวเก็บใน WhieDemo2
class WhileDemo2{
public static void main(String[] args) {
int num1 = Integer.parseInt(args[0]);
int num2 = Integer.parseInt(args[1]);
int x = num1;
int total = num1;
while (x <= num2) {
total += x;
x = x + 1;
}
System.out.println (“The series from “ + num1 + “ to “ + num2 + “ is “ + total);
}
}
ตัวอยาง
class WhileDemo3 {
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) ;
}
}
ผลลัพธที่ไดคือ
Number : 0.2
Times : 4
21. บทที่ 3 คําสั่งควบคุมการทํางาน หนาที่ 86
เอกสารประกอบการสอน 305272 การเขียนโปรแกรมคอมพิวเตอรขั้นสูง
อ.สุรางคนา ระวังยศ
คําสั่งแบบ do…while
เงื่อนไขแบบนี้ จะเปนการทํางานในลูปรอบแรก กอนแลวจะตรวจสอบเงื่อนไขที่คําสั่ง while
หลังจากที่ทํางานเสร็จแลว ดังนั้น Loop จะวนอยางนอย หนึ่งรอบเสมอ ซึ่งแตกตางกับเงื่อนไขแบบ
แรก โดยถาเงื่อนไขเปนจริงก็จะกลับขึ้นไปทํางานที่คําสั่งตางๆ ใหม แตถาไมเปนจริงก็จะหลุด
ออกมาทํางานที่คําสั่งตอไป
รูปแบบของประโยค do … while :
Boolean Expression
- ตองมีผลลัพธเปนชนิดขอมูล Boolean เทานั้น
- do-while จะตองปดดวยสัญลักษณ ;
หลักการทํางาน
1. ทํางานใน Block
2. Boolean Expression เปนจริงทํางานตอ ถาเปนเท็จจบการทํางาน
3. กลับไปทําขั้นตอนที่ 1
ตัวอยาง:
int x = 0;
do {
x += 1;
} while (x <= 10);
ตัวอยาง
class DoWhileDemo1 {
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) ;
}
}
do [{]
[statements]
[}] while ( Boolean Expression );
22. บทที่ 3 คําสั่งควบคุมการทํางาน หนาที่ 87
เอกสารประกอบการสอน 305272 การเขียนโปรแกรมคอมพิวเตอรขั้นสูง
อ.สุรางคนา ระวังยศ
ตัวอยาง สรางเมนูโดยใชคําสั่ง do … while
public class DoWhileDemo2{
public static void main (String args[])
throws java.io.IOException{
char choice;
do{
System.out.println("Help on: ");
System.out.println(" 1. If");
System.out.println(" 2. Switch");
System.out.println(" 3. While");
System.out.println(" 4. Do .. While");
System.out.println(" 5. For n");
System.out.println("Choose One");
choice = (char) System.in.read();// รับขอมูลจากจอภาพมา 1 ตัวอักษร
}while (choice < '1' || choice > '5');
System.out.println ("n");
switch (choice) {
case '1':
System.out.println ("The if:n");
System.out.println ("if (condition) statement;");
System.out.println ("else statement;");
break;
case '2':
System.out.println ("The switch:n");
System.out.println ("switch (expression){");
System.out.println ("statement sequence");
System.out.println ("break; ");
System.out.println (" || … ");
System.out.println ("}");
break;
case '3':
System.out.println ("The while:n");
System.out.println ("while(condition) statement;");
break;
case '4':
System.out.println ("The do … while:n");
System.out.println ("do { ");
System.out.println (" statement; ");
System.out.println ("} while conditions); ");
break;
case '5':
System.out.println ("The for:n");
System.out.println ("for(int; condition; iteration)");
System.out.println (" statement; ");
break; } } }