คำสั่งควบคุมโปรแกรม
TRANSCRIPT
คำ�สงควบคมโปรแกรม
ตวดำ�เนนก�รท�งตรรกะ• ตวดำ�เนนก�รท�งตรรกะ (Logical Operator) ประกอบดวย ก�รทำ� AND(และ) , OR(หรอ) และ NOT(นเสธ) เมอกระทำ�
กบค�ใด ผลลพธทออกม�จะเปนจรงหรอเทจ ตวดำ�เนนก�รท�งตรรกะแสดงได ดงต�ร�งตอไปน
• จ�กต�ร�งค�คว�มจรงของนพจนตรรกะ เมอ 0 แทนค�เทจ และ 1 แทนค�จรง แสดงดงต�ร�ง• - p&& q จะมค�จรง เมอ p และ q มค�จรงทงค มฉะนนจะมค�เปนเทจ• - p || q จะมค�จรง เมอ p และ q มค�เทจทงค มฉะนนจะมค�เปนจรง• - p จะมค�จรง เมอ p มค�เทจ และ !p จะมค�เทจ เมอ p มค�จรง
โปรแกรมแสดงค�ของนพจนตรรกะ
ผลลพธ คอ
ตวดำ�เนนก�รแบบสมพนธ (Relational Operators) • คอตวดำ�เนนก�รททำ�หน�ทเปรยบเทยบค�ระหว�งตวแปรสองตว หรอนพจนสองนพจน โดยจะคนค�เปนจรงหรอ
เทจ (Boolean)
ตวดำ�เนนก�รท�งตรรกศ�สตร (Logical Operator)• ตวดำ�เนนก�รท�งตรรกะ เปนตวดำ�เนนก�รเกยวของกบนพจนทส�ม�รถบอกค�คว�มจรงเปนจรง(true) หรอเทจ
(false) ได หรอชนดขอมลตรรกะ เชน ตวแปรประเภท boolean ผลลพธทไดจ�กก�รกระทำ�จะไดค�คงทตรรกะเปน true หรอ false ตวดำ�เนนก�รท�งตรรกะไดแกเครองหม�ย !, &&, &, ||, |, ^ มตวอย�งก�รใชง�นดงน
ตวดำ�เนนก�รท�งตรรกะแบบต�งๆ ส�ม�รถแสดงผลลพธของนพจนตรรกะ ต�มค�คว�มจรงของก�รดำ�เนนก�รไดดงต�ร�งค�คว�มจรง (Truth
Table) ดงน• ต�ร�งค�คว�มจรงของตวดำ�เนนก�ร ! หรอ NOT
ต�ร�งค�คว�มจรงของตวดำ�เนนก�ร && หรอAND
ต�ร�งค�คว�มจรงของตวดำ�เนนก�ร || หรอOR
ต�ร�งค�คว�มจรงของตวดำ�เนนก�ร ^ หรอXOR
ตวอย�ง ก�รใช Operator แบบ boolean• class BoolLogic{
• public static void main(String args[]){
• boolean a = true; boolean b = false;
• boolean c = a | b; boolean d = a & b;
• boolean e = a ^ b; boolean f = (!a & b) | (a & !b);
• boolean g = !a;
• System.out.println("a = " + a); System.out.println("b = " + b);
• System.out.println("a | b = " + c); System.out.println("a & b = " + d);
• System.out.println("a ^ b = " + e); System.out.println("!a = " + g);
• System.out.println("!a & b | a & !b = " + f);
• }
• }
ตวดำ�เนนก�รระดบ (Bitwise Operator) ในก�รจดเกบขอมล ประเภท Interger, short, int และ long จะเกบในรปแบบบต และ
ก�รเกบขอมลจะเปนแบบเครองหม�ย
ลำ�ดบก�รทำ�ง�นของตวดำ�เนนก�ร(precedence and associativity of operators)
.• ตวดำ�เนนก�รทมลำ�ดบก�รทำ�ง�นอนดบท 1 จะทำ�ง�นกอนอนดบท 2 โดย
ทำ�ง�นไปเรอย ๆ จนกระทงหมดตวดำ�เนนก�ร สวนลกษณะก�รทำ�ง�น ของตวดำ�เนนก�รแตละอนดบนนแตกต�งกนไป ซงจะเปนก�รทำ�ง�นจ�ก
ซ�ยไปขว� (left to rigth) หรอขว�ไปซ�ย (rigth to left) กได
ก�รเลอกทำ�แบบท�งเดยว (if statement)• ก�รเลอกทำ�แบบท�งเดยว (if statement)
• ในภ�ษ�จ�ว�จะใชคำ�สง if เลอกทำ�แบบท�งเดยวเพอจะตรวจสอบว�ชดคำ�สงทต�มม�จะทำ�หรอไม ในก�รทำ�ง�น ของคำ�สงคอมพวเตอรจะตรวจสอบเงอนไขกอน ถ�เงอนไขเปนจรงจะทำ�คำ�สงหรอสเตตเมนตทต�มหลงหรอเปนส
เตตเมนตรวมทอยในเครองหม�ย { } แตถ�เงอนไขเปนเทจคอมพวเตอรจะกระโดดข�มคำ�สงหรอสเตตเมนตต�มม� และไปทำ�คำ�สงหรอสเตตเมนตตอไป รปแบบคำ�สงเปนดงตอไปน
• รปแบบ
• If(condition) {action statement}
• โดยก�รตรวจสอบเงอนไขจะเปนก�รกระทำ�แบบบลน ผลลพธทไดจะเปนจรงหรอเทจเท�นนถ�ห�กมก�รใชตวดำ�เนน ก�รจะใชตวดำ�เนนก�รทใหผลลพธเปนแบบบลน สำ�หรบก�รทำ�ง�นของคำ�สง if ส�รถเขยนเปนผงง�นไดดงน
.
ตวอย�ง โปรแกรมตอไปนจะตรวจสอบว� x ม�กกว� y จรงหรอไม ถ�ห�ก x ม�กกว� y จรงโปรแกรมจะทำ�คำ�สงตอม�
ตวอย�ง ถ�ห�กก�รเขยนโปรกรมตรวจสอบว� x ม�กกว� y และนอย กว� 10 หรอไม ถ�เปนจรงใหแสดงตวเลข x ออกม�จะส�ม�รถเขยนได
ดงน
ตวอย�ง ถ�ห�กตวแปร mark เกบคะแนน และตองก�รตรวจสอบว� ถ�คะแนนม�กกว� 80 และนอยกว�หรอเท�กบ 100 ใหไดเกรด A จะ
เขยนคำ�สง if ไดเปน
ในก�รตรวจสอบเงอนไขนนตวแปรทนำ�ม�เปรยบเทยบจะตองเปนขอมลประเภทเดยวกน ตวอย�ง เชน ถ�ให ch เปน char ให num และmark เปน int ก�รตรวจสอบเงอนไขอ�จเขยนไดดงน
ตวอกขระสองตวส�ม�รถนำ�ม�เปรยบเทยบกนไดเชนกน เนองจ�กภ�จ�ว�จะเกบตวอกขระในรปของรหสยนโคด (Unicode) เมอมก�รเปรยบ เทยบภ�ษ�จ�ว�จะนำ�เอ�รหสยนโคด ซงอยในรปของเลขจำ�นวนเตมม�เปรยบเทยบกน อย�งเชน ตว A จะม�กอนตว B เนองจ�กรหสของ
ตว A คอ 65 สวนรหสของตว B คอ 66 ดงนน ถ�ห�กเขยนนพจนเปน A<B จะไดค�เปนจรงเสมอ และถ�ห�กมก�รเขยนสเตตเมนตตอไปน
จะทำ�ใหก�รตรวจสอบเงอนไขของ if เปนจรงเสมอ ในก�รใชคำ�สงตรวจสอบเงอนไข ควรระวงดงตอไปน
1. ระวงอย�ใสเครองหม�ยเซมดคลอน ( ; ) หลงก�รตรวจสอบเงอนไขของ if เนองจ�กถ�คอมไพลเลอรพบเครองหม�ยเซมโคลอนมนจะมองเปนสเตตเมนตว�ง ( null statement ) คอไมทำ�อะไร
2. ถ�ห�กสเตตเมนตทตองก�รใหทำ�หลง if เปนสเตตเมนตรวม หรอม ก�รทำ�หล�ยๆ คำ�สง จะตองใสเครองหม�ยวงเลบ เพอรวมสเตตเมนต
เปนบลอก ตวอย�งเชน
คำ�สงเลอกทำ�อย�งใดอย�งหนง ( if-else )
• จ�กตำ�สง if ทผ�นม�จะใชในก�รเขยนโปรแกรมทใชทดสอบว�จะเลอกทำ� หรอไม ถ�เงอนไขเปนจรงจะทำ�คำ�สงหรอสเตตเมนตหลง if ในกรณท
คอมพวเตอรตองเลอกทำ�อย�งใดอย�งหนง โดยตรวจสอบเงอนไขท กำ�หนดจะใชคำ�สง if-else ถ�เงอนไขเปนจรงจะทำ�คำ�สงหลง if แตถ�เงอนไข
เปนเทจจะทำ�คำ�สงหลง else โดยนพจนก�รตรวจสอบเงอนไขทต�ม หลง if จะเปนขอมลท�งตรรก รปแบบคำ�สงเปนดงน
ก�รทำ�ง�นของคำ�สงนส�ม�รถเขยนผงง�นไดดงน
ตวอย�ง มควแปร a และ b เกบค�ขอมลใดๆ ถ�ห�กนำ�ขอมลทงสองม�เปรยบ เทยบกนและตองก�รใหตวแปร c เกบขอมลทมค�ม�กกว�ส�ม�รถเขยนไดดงน
จงเขยนโปรแกรมคำ�นวณห�พนทวงกลมวธทำ� พนทวงกลมห�ไดจ�ก พ.ท. = Pi* รศมยกกำ�ลงสองในก�รออกแบบโปรแกรมจะใหรบค�รศมเข�ไปโดยตรวจสอบว�ค�รศมนนตองม�กกว�ศนย
สำ�หรบโปรแกรมเขยนไดดงน
จ�กตวอย�ง ถ�ห�กเงอนไขของ if เปนจรงจะทำ�สเตตเมนตทต�มม� ซงมสเตตเมนตเดยว แตถ�ห�กเงอนไขของ if เปนเทจจะทำ�สเตตเมนตหลง else ซงเปนสเตตเมนตรวม ท เมอรนโปรแกรม ถ�ห�กปอนค�รศมทมค�นอยกว�ศนยจะไดผลลพธดงน
ถ�ห�กปอนรศมทมค�ม�กกว�ศนยจะไดผลลพธดงน
จงเขยนโปรแกรมรบตวเลขสองตวเปนจำ�นวนเตม จ�กนนใหคอมพวเตอรห�รเลขทงสองแลวแสดงผลห�รออกม�วธทำ� ในก�รห�รเลขนนจะตองตรวจสอบดวยง�ตวห�รมค�เปนศนยหรอไม ถ�เปนศนยจะห�รไมได ในโปรแกรมตอไปนจะประก�ศตวแปรสำ�หรบเกบตวเลขสองตว
คอ number1 และ number2 สวนผลก�รห�รจะเกบไวในตวแปร quotient
แตถ�ห�กปอนค�แรกเปน 10 และค�ทสองเปน4 ผลลพธทไดจะเปนดงน
จงเขยนโปรแกรมสำ�หรบคำ�นวณจำ�นวนเงนค�จ�ง โดยมอตร�จ�งชวโมงละ 150 บ�ท โดยจะตองทำ�ง�น 40 ชวโมง แตถ�ห�กทำ�ง�นเกน 40 ชวโมงในชวโมงทเกนจะไดค�จ�งเพมขน 50 เปอรเซนต วธทำ� โปรแกรมจะตองรบจำ�นวนชวโมงเข�ไป และโปรแกรมทดสอบว� จำ�นวนชวโมงเกน 40 หรอไม ถ�เกนใหนำ�จำ�นวนชวโมงทเกนม�คดจำ�นวนเงนเพมชวโมงละ 50 เปอรเซนต ซงทำ�ไดโดยนำ�จำ�นวนชวโมงทเกนม�คณกบ 1.5 แลวคณกบค�จ�งร�ยชวโมง
ถ�ให STANDARD เปนจำ�นวนชวโมงม�ตรฐ�นทตองทำ�, RATE เปนค�จ�งร�ยชวโมง, hours เปนชวโมงทำ�ง�น ส�ม�รถเขยนก�รตรวจสอบเงอนไขไดดงน
ส�ม�รถเขยนโปรแกรมไดดงน
ก�รใชคำ�สง if-else-if ก�รเขยนคำ�สงแบบเลอกทำ�สองท�งทใช if-else นนจะพบว�ชดคำ�สงทอยหลง else จะถกทำ�ง�น
ถ�ห�กประโยคเงอนไขของ if เปนเทจ แตถ�ตองก�รใหตรวจสอบเงอนไขอนๆ กอนทจะทำ�ชดคำ�สงหลง if-else-if แทน ตวอย�งเชน ถ�ห�กตองก�รเขยนโปรแกรมในก�รคดผลสอบของนกเรยน โดยมเงอนไขเปนถ�คะแนนม�กกว� 50 ใหผ�น แตถ�คะแนนไมม�กกว� 50 ใหตก ส�ม�รถนำ�คำ�สง if-else ม�ใชได โดยเขยนดงน
สำ�หรบง�นบ�งประเภทถ�ห�กตรวจสอบเงอนไขแลวไดผลเปนเทจ จ�กนนตองก�รใหตรวจสอบเงอนไขอกกทำ�ไดเชนกน เชน ถ�ห�กในก�รคดผลสอบแลวตองก�รใหผลลพธออกม�เปนเกรดโดยมเงอนไขดงน
จ�กผงง�นจะพบว�ถ�ตรวจสอบเงอนไขแลวไดผลลพธเปนเทจจะตองม ก�รตรวจสอบเงอนไขในครงตอไป ก�รทำ�ง�นลกษณะนจะใชคำ�สง if-
else-if โดยมรปแบบดงนTestGrade.java โปรแกรมตดเกรด
ก�รเขยนโปรแกรมทตองมก�รตรวจสอบเงอนไขม�กๆ ดงตวอย�งตดเกรดทผ�นม� ผเขยนโปรแกรมจะตองออกแบบโปรแกรมใหด ถ�ห�กเขยน
โปรแกรมโดยใช if ทไมม else ดงตวอย�งตอไปน
จ�กสวนของโปรแกรมทเขยนขน ถ�ห�กคะแนนทปอนเข�ไปมค�เปน 95 “จะทำ�ใหไดเกรด A” ซงเปนเกรดทถกตอง แตถ� ห�กคะแนนทปอนเข�ไปเปน 50 คะแนน จะทำ�ใหไดเกรดทกเกรด เนองจ�กก�รตรวจสอบเงอนไขทกเงอนไขเปนจรง
ทงหมด แตถ�ห�กเขยนโปรแกรมจะไดดงตวอย�งตอไปน
ก�รเขยนโปรแกรมโดยก�รตรวจสอบเงอนไขในลกษณะด�นบนนนจะใช if ทไมม else ซงจะนำ�ตวดำ�เนนก�ร AND ม�ใชดวยและจะทำ�ใหผลลพธเหมอนกบตวอย�งในโปรแกรมท 3.7 แตก�รเขยนโปรแกรมในลกษณะนไมใชก�รเขยนโปรแกรมทด เนองจ�กโปรแกรมจะตอง ตรวจสอบเงอนไขทกครง ทำ�ใหก�รทำ�ง�นช�กว�โปรแกรมท 3.7
นอกจ�กนก�รเขยนโปรแกรมในง�นบ�งประเภทจะนำ�คำ�สง if ในลกษณะต�งๆ ม�ซอน เรยกว� Nested if ตวอย�งเชน ก�รเขยนโปรแกรมในลกษณะตอไปน
.
.
ก�รทำ�ง�นดงกล�วถ�ห�กเงอนไขท 1 เปนจรง โปรแกรมจะตรวจ สอบเงอนไขท 2 และเงอนไขท 2 เปนจรงโปรแกรมจะตรวจสอบ
เงอนไขท 3 ตอไป ถ�เงอนไขท 2 และ 3 เปนเทจ โปรแกรมจะทำ�คำ�สง ถดไป แตถ�เงอนไขท 1 เปนเทจโปรแกรมจะทำ�สเตตเมนตท 2 จ�ก
นนจงทำ�คำ�สงถดไป
ตวอย�งโปรแกรมตอไปนจะรบตวเลขจำ�นวนเตมเข�ม�ส�มค� จ�กนน จะแสดงค�นอยทสด โดยก�รห�ค�นอยทสดนนจะใชก�รตรวจสอบ
เงอนไขแบบ nested if จ�กโปรแกรมถ�ห�กปอนค� 45 22 และ69
จะใหค�ตำ�ทสดดงตอไปน
ก�รเลอกทำ�แบบ switch ก�รเขยนโปรแกรมทตองมก�รเลอกทำ�หล�ยท�งเลอก เร�ส�ม�รถนำ�ประโยคคำ�สง if-else ม�ซอนกนได แตถ�เงอนไขทตองตดสนใจขนกบตวแปรเดยว เร�ส�ม�รถใชคำ�สง switch..case แทนได คำ�
สง switch นมคว�มซบซอนนอยกว�ก�รนำ� if-else ม�เขยนซอนกน และส�ม�รถเปลยนเงอนไขไดง�ยอกดวย ตวอย�งเชน ถ�เขยนโปรแกรมเปนลกษณะเมนดงตอไปน
และใหผใชโปรแกรมเลอกวธก�รคำ�นวณเข�ไปโดยปอนค�อนพตเข�ไป เร�ส�ม�รถเขยนโปรแกรมโดยนำ�ค�อนพตทไดรบ เข�ไปเกบไวในตวแปรตวหนง และใชคำ�สง switch เลอกว�มค�เท�กบค�ใด (1,2,3,4) จ�กนนใหไปทำ�ง�นต�มทเลอก
ประโยคคำ�สง switch..case มรปแบบดงน
คำ�สง switch นจะนำ�ค�ใน variable ม�ตรวจสอบว�เท�กบค�คงทค�ใดหลง case จ�กนน โปรแกรมจะไปทำ� statement หลงค�คงทตวนน และออกจ�ก switch เมอถงคำ�สง break แตถ�ไมเท�ค�คงทค�ใดเลย โปรแกรมจะไป ทำ� statement หลง default แตถ�ห�กไมมคำ�สง break โปรแกรมจะทำ�ง�นต�มคำ�สงทกๆ case แมว�ตวแปรใน switch จะไมตรงกบ case สำ�หรบค�ทใชตรวจสอบจะเปนตวแปรนพจน หรอฟงกชนกได ส ำ�หรบในแตละ case ส�ม�รถมคำ�
สงไดม�กกว�หนงคำ�สงหรออ�จไมมกได โดยถ�ไมมคำ�สงโปรแกรมจะไปทำ�ง�นใน case ถดไป ค�คงทหลง case จะตองเปนแบบ char, byte, short หรอ int แลวต�มดวยเครองหม�ยโคลอน(:)
• .
.
ตวอย�ง ถ�ห�กตวแปร num เปนตวเลขจำ�นวนเตม ก�รกำ�หนดค�หลง case ในคำ�สง switch เชน
SwitchDemo.java เปนโปรแกรมทดสอบ ก�รเลอกทำ�แบบ switch โดยจะใหปอนตวเลข
เข�ไป
SwitchDemo.java เปนโปรแกรมทดสอบ ก�รเลอกทำ�แบบ switch โดยจะใหปอนตวเลข
เข�ไป
SwitchDemo.java เปนโปรแกรมทดสอบ ก�รเลอกทำ�แบบ switch โดยจะใหปอนตวเลข
เข�ไป
เมอรนโปรแกรมแลวปอนขอมลเลข 2 แลวกดคย Enter จะไดผลลพธดงน
แตถ�ห�กปอนค� 5 เข�ไปซงไมเท�กบค�คงทใดเลย จะไดผลลพธดงน
ใหทดลองนำ�คำ�สง break หลง casa ทกตวออก แลวลองรนโปรแกรมอกครงแลวสงเกตผลทเกดขน
ก�รควบคมก�รทำ�ซำ!�ดวยคำ�สง for ก�รซำ�แบบ for หรอ loop for จะเปนก�รใหโปรแกรมทำ�ซำ�จนกว�ค�ตวแปรจะครบต�มทตงไวหรอทำ�ต�มเงอนไขทกำ�หนด เรมแรกโปรแกรมจะกำ�หนดค�เรมตนใหกบตวแปรเรมตน (initialization) จ�กนนจะตรวจสอบเงอนไข ถ�ห�กเงอนไขเปนจรงจะทำ�สเตตเมนตทต�มม� และปรบค�ตวแปรควบคม โดยรปแบบของคำ�สงเปนดงนรปแบบ ในสวนของ condition บ�งครงจะเรยกตวแปรควบคมลป ( loop control variable ) เรมตนคำ�สงจะทำ�สวนกำ�หนดค�เรมตน (initial value) จ�กนนจะตรวจสอบว�เงอนไขเปนจรงหรอไม ถ�เงอนไขเปนจรงจะทำ�ต�มสเตตเมนตทจะทำ�ซำ�แลวกลบม�ทำ�สวน update ซงสวนม�กแลวจะเปนก�รเพมค�หรอลดค�ตวแปร จ�กนนจะตรวจสอบเงอนไขใหมโดยทำ�แบบนไปจนกว�เงอนไขจะเปนเทจ สเตตเมนตททำ�ซำ�อ�จเปนสเตตเมนต
รวม (Compound Statement) กได แตตองอยภ�ยในเครองหม�ย { กบ } สำ�หรบในสวนของก�รกำ�หนดค�เรมตน และ update มกจะเขยนเปนคำ�สงเดยว แตถ�ห�กตองก�รใชหล�ยคำ�สงจะใชเครองหม�ย comma คนระหว�งคำ�สง ตวอย�งเชน ถ�เขยนคำ�สงดงตอไปน
เร มโปรแกรมจะใสค�เร มตน 1 ลงในตวแปร number จ�กนนจะทดสอบเงอนไขว�เงอนไขเปนจรงหรอไม ถ�เปนจรงจะทำ�สเตตเมนตและเพมค� number ขนหนงค� ในก�รเพมค�ใหกบตวแปรควบคมจะเพมขนเปนลำ�ดบ โดยอ�จเปนตวเลข 1,2,3,… ‘หรออกษร A’,’B’,’C’, กไดดงนน ก�รประก�ศประเภทของตวแปรควบคมจะตองใหสอดคลองกบค�ของขอมลดวย ถ�ห�กเขยนคำ�สง for ดงตอไปน
โปรแกรมจะพมพค� counter ตงแต 1 ถง 10 โดยเรมแรกใสค�ใหกบตวแปร counter ซงเปนตวแปรเรมตนกอน จ�กนน
จะตรวจสอบเงอนไขว� counter นอยกว�หรอเท�กบ 10 จรงหรอไม ถ�จรงจะพมพค�ใน counter และเพม ค� counter ขนอกหนงค� จ�กนนจะตรวจสอบเงอนไขใหม โดยก�รทำ�ง�นส�ม�รถเขยนผงง�นไดดงน
Squares.java ตวโปรแกรมแสดงตวเลข 1 ถง 10 ทมค�ยกกำ�ลงสอง
• จ�กโปรแกรมชดคำ�สงในลปจะเปนคำ�สงแสดงผล โดยจะใชรหส \t ในก�ร ควบคมก�รเวนวรรค ซงจะทำ�ใหผลลพธทไดเปนดงตอไปน
ก�รประก�ศตวแปรควบคมลป ส�ม�รถประก�ศในคำ�สง for เลยได และถ� ห�กก�รตรวจสอบเงอนไขในคำ�สง for เปนเทจตงแตเรมตนจะทำ�ใหไมมก�ร
ทำ�คำ�สงใดๆ ในลปเลย ตวอย�งเชนก�รเขยน สเตตเมนตตอไปน
จ�กชดคำ�สงด�นบนจะกำ�หนดค�เรมตนให count มค�เปน 11 แตเมอตรวจสอบ เงอนไข count <= 10 แลวไดผลลพธเปนเทจ โปรแกรมจะออกนอกลปทนท
ในก�รเขยนโปรแกรมทำ�ซำ� เร�ส�ม�รถลดค�ใหกบตวแปรไดเชน ถ� ห�กเขยนชดคำ�สงดงตอไปนโปรแกรมจะพมพ 100 จนถง 1
สำ�หรบก�รเพมค�หรอลดค�ใหกบตวควบคมลป ส�ม�รถเพมค�ขน ครงละหล�ยๆค�ต�มตองก�รได ตวอย�งเชนก�รเขยนคำ�สงตอไปนจะ
พมพ 0 ถง 100 โดยเพมค�ใหกบตวแปรควบคมลปครงละ 5 ค� ถ�ห�กตองก�รใหสเตตเมนตทจะทำ�ง�นซำ�เปนสเตตเมนตรวม จะ
ตองเขยนสเตตเมนตเปนบลอกโดยเขยนในเครองหม�ย { และ } ดงตวอย�งชดคำ�สงตอไปจะเปนก�รเขยนโปรแกรมใหคอมพวเตอรแสดงตวเลขยกกำ�ลงสอง
ของค� 0 ถง 100
ก�รกำ�หนดค�ตวแปรเรมตนในคำ�สง for และก�รเขยนนพจน เปลยนแปลงตวแปรควบคม ส�ม�รถกำ�หนดม�กกว�หนงตวได โดยใช
เครองหม�ย (;) คนระหว�งตวแปร ดงตวอย�งก�รเขยนตอ
เปนตวอย�งก�รเขยนโปรแกรมใหแสดงเปนต�ร�งสตรคณ จ�กโปรแกรมคอมพวเตอรจะแสดงผลเปนสตรคณแม 2 ก�ร ทำ�ง�นจะใชก�รวนลป 12 ครง และใหค�คงทซงเท�กบ 2 คณกบตวแปรควบคมลปผลจ�กก�รรนจะเปนดงน
ตวอย�โปรแกรมตอไปเปนโปรแกรมห�ค�ผลบวกของตวเลข เมอรนโปรแกรมเครองจะใหใสค�ตวเลข ถ�ใสเลข 5 คอมพวเตอรจะทำ�ก�รบวกเลขตงแต 1 ไปจนถง 5 ก�รทำ�ง�นของโปรแกรมจะประก�ศตวแปรสำ�หรบเกบขอมลผลบวกทชอว� SUM โดยเรมตนใหตวแปรนนม ค� 0 จ�กนนจะใหโปรแกรม
2. ถ�ห�กสเตตเมนตทตองก�รใหทำ�หลง if เปนสเตตเมนตรวม หรอมก�รทำ�หล�ยๆ คำ�สง จะตองใสเครองหม�ยวงเลบ เพอรวมสเตตเมนตเปนบลอก จ�กสวนของโปรแกรมท�งซ�ยมอ สเตตเมนตรวมทอยในเครองหม�ยปกก�จะทำ�ทงหมดถ�ห�กเงอนไขของ if เปนจรง แตสวนของโปรแกรมท�งขว�มอ ถ�ห�กเงอนไขของ if เปนจรงจะทำ� bonus = 500.0สเตตเมนตเดยวกน
โปรแกรมบวกเลขตงแต 1 ถงค�ทอนพตเข�ไป
จะใชสำ�หรบบวกเลข 5 ค� และแสดงผลออกท�งจอภ�พ ในโปรแกรมจะให โปรแกรมทำ�ซำ� 5 ครง ก�รทำ�ง�นแตละครงเครองจะใหใสตวเลข และนำ�ตวเลขท
รบเข�ไปบวกกบค�ตวแปรชอ SUM และเกบผลลพธไวใน SUM จ�กนนทำ�ซำ�และ บวกไปเรอยๆ จ�กโปรแกรมจะเหนว�ลป for จะเปนสเตตเมนตรวม ซง
ม { กบ } ครอมอย
โปรแกรมบวกเลข 5 จำ�นวนทปอนเข�ไป เมอรนโปรแกรมและปอนขอมลเข�ไป 5 ค�ผลลพธทได จะเปนดงน
โปรแกรมนจะใชชดคำ�สงลป for โดยมก�รกำ�หนดค�เรมตนใหตวแปร สองตว และเปลยนแปลงค�ในตวแปรสองตวโดยตวหนงเพมค� อกตว
หนงลดค�
จ�กโปรแกรมจะเหนว�ก�รกำ�หนดค�ให ตวแปรม�กกว�หนงตวในลป for จะใช เครองหม�ย , คน ในโปรแกรมจะวนลปไปจนกว� I ไมนอยกว� 8 โดยตวแปร i จะ
เพมครงละหนงไปจนกว�ค� j จะลด ครงละหนง ผลก�รทำ�โปรแกรมจะเปนดงน
ก�รใชลปแบบ for นนส�ม�รถใหโปรแกรมออก จ�กลปต�มเงอนไขทกำ�หนดให โดยใชคำ�
สง break ดงตวอย�ง
TestLoopBreak.java ตวอย�งโปรแกรมนคอมพวเตอรจะทำ�ง�นในลปไมเท�กบจำ�นวนครงทกำ�หนดไวในคำ�สง for โดยสเตตเมนตของลปจะใชคำ�สง if และคำ�สง break เมอค�ตวแปรควบคม I มค�เท�กบ 10 คอมพวเตอรจะทำ�คำ�สง break ซงเปนคำ�สงทใหออกนอกลปก�รทำ�ง�น ก�รตรวจสอบเงอนไขในก�รทำ�ลปนส�ม�รถนำ�ไปประยกตในง�นต�งๆ ได ตวอย�งเชน ถ�ห�กตองก�รผลรวมของตวเลข 1 ถง 100 ทห�รดวย 3 หรอ 5 ลงตว กอ�จใชก�รตรวจสอบเงอนไขนในลปนบตวเลขได
.
TestSum2.java โปรแกรมห�ผลรวมของเลข 1 ถง 100 ทห�รดวย3 หรอ 5 ลงตว ก�รตรวจสอบทำ�ไดโดยทดสอบว�ตวเลขนนห�รดวย3 หรอ 5 แลวมเศษเปนศนยหรอไม ถ�ใชใหห�ผลรวม
สำ�หรบผลลพธของโปรแกรมเปนดงน
ลปซอนลป (Nested Loops)• ในก�รเขยนโปรแกรมส�ม�รถนำ�คำ�สงลปแบบต�งๆ ใหม�ทำ�ง�นซอนกนไดเรยกว�ลปแบบซอนลปดงตวอย�งตอไปน
Public class Nestedloop1 { Public static void main(String[ ] args) { for(int i = 1; i < = 3; i ++) for(int j = 1; j < = 3; j ++) System.out.print(j + “ “); } }
จ�กตวอย�งโปรแกรมลปแรกจะเปนลปของตวแปร I โดยภ�ยในลปจะทำ�ลปของ ตวแปร j จำ�นวน 3 ครง ทำ�ใหก�รทำ�ง�น System.out.print (j+ “ “) มก�รทำ�ง�น ทงหมด 9 ครง
.
• โปรแกรมตอไปนจะเปนก�รนำ�เครองหม�ย * ม�พมพเปนรปส�มเหลยมท�งจอภ�พ โดยจะ ออกแบบโปรแกรม ใหทำ�ง�นแบบลปซอนลป โดยลปทหนงใหทำ�ลปในหนงครง ลปทสองใหทำ�ลปในสองครงไปเรอยๆ ในก�รทำ�ลป
แตละครงนนจะพมพเครองหม�ย * หนงตว เมอทำ�ลปในครบแลวจะขนบรรทดใหม Public class Star { Public static void main(String[ ] args) { for(int i = 1; i < = 8; i ++){ for(int j = 1; j < = i; j ++) System.out.print( “ * “); System.out.print(); } } }
คำ�สง break และ continue• จ�กตวอย�งทำ�ซำ�แบบ for โปรแกรมท 3.15 ไดทดลองคำ�สง break ม�บ�ง
แลว โดยคำ�สงนส�ม�รถใชง�นรวมกบ while , for , do/while หรอ switch ได สำ�หรบคำ�สงททำ�ง�นตรงกนข�มกบ คำ�
สง break คอคำ�สง continue ซงส�ม�รถใชไดใน while , for หรอ do/while ไดเชนกน เมอโปรแกรมทำ�ง�นม�ถงคำ�สง continue จะ
ทำ�ลปตอไปโดยไมทำ�สเตตเมนตทต�มหลง continue โปรแกรมท 3.23 แสดงตวอย�งก�รใช break โดยถ�เงอนไขของ if เปนจรงจะออกนอกลป
ทนท สวนโปรแกรม 3.24 จะแสดงตวอย�งก�รใชคำ�สง continue
• จ�กตวอย�งทำ�ซำ�แบบ for โปรแกรมท 3.15 ไดทดลองคำ�สง break ม�บ�งแลว โดยคำ�สงนส�ม�รถใชง�นรวมกบ while , for , do/while หรอ switch ได สำ�หรบคำ�สงททำ�ง�นตรงกนข�มกบ คำ�สง break คอคำ�สง continue ซงส�ม�รถใชไดใน while , for หรอ do/while ไ
ดเชนกน เมอโปรแกรมทำ�ง�นม�ถงคำ�สง continue จะทำ�ลปตอไปโดยไมทำ�สเตตเมนตทต�มหลง continue โปรแกรมท 3.23 แสดงตวอย�ง ก�รใช break โดยถ�เงอนไขของ if เปนจรงจะออกนอกลปทนท สวนโปรแกรม 3.24 จะแสดงตวอย�งก�รใชคำ�สง continue
Public class BrekDemo { Public static void main(String[ ] argd){ int num = 100; for(int i = 0; i < num; i ++){ if (i*i > = num)break; System.out.print(i+ “ “); } System.out.print(“Loop complete. “); } } }
.
.
• โปรแกรมนจะสร�งลปแบบ for ขนม�ทำ�ง�นแบบวนซำ�โดยนบตวแปร i ตงแต 0 ไปจนถง 10 ในก�รวนซำ�แตละครงจะ ตรวจสอบเงอนไขของ if ว�ตวแปร I ยกกำ�ลงสองมค�ม�กกว� num จรงหรอไม ถ�เปนจรงจะออกนอกลป
• ก�รทำ�ลปแตละครงจะแสดงผลค� i ออกม� เมอทำ�ลปจน i• มค�เปน10 โปรแกรมจะหยดพมพ ผลลพธเปนดงน Public class ContDemo { Public static void main(String[ ] args) { for(int i = 0; i < 100; i ++) if ((i%2 continue; System.out.print(i); } } }
.
• โปรแกรมตวอย�งก�รใชคำ�สง continue โดยจะวนลปตงแต 0 ถง 100
ขอควรระวงในก�รใชคำ�สงทำ�ซำ�• ในก�รเขยนโปรแกรมทำ�ลปมกจะมขอผดพล�ดเกดขนเสมอ โดยโปรแกรมทเขยนขนจะคอมไพลผ�น แตจะทำ�ง�นไมถกตอง
ต�มทตองก�ร ขอผดพล�ดนเรยกว� logic error ซงโดยทวไปในก�รทำ�ลปแลวจะมขอผดพล�ดอย 4 ประก�รคอ• 1. ก�รกำ�หนดค�เรมตนในก�รทำ�ลป• 2. ก�รทดสอบเงอนไขกอนก�รทำ�ลป• 3. ขอผดพล�ดภ�ยในโครงสร�งของลป• 4. ก�รเขยนสเตตเมนตปรบค�ตวควบคมลป //outcome product will equal 3*57*……*99 long product = 1; int I = 3; while (i < = 100) { product = product * i; i = i+2; } System.out.print(product);
.
• พจ�รณ�สวนของโปรแกรมตอไปน ซงสวนประกอบของโปรแกรมห�ผล คณของเลขคทอยระหว�งตวเลข 1 ถง 100
จ�กโปรแกรมทเขยนขนจะเหนว�จะประก�ศตวแปร product เปน ประเภท long ถ�ห�กประก�ศตวแปรนเปนประเภท int จะใหคำ�ตอบไมถก
ตอง เนองจ�กค�ผลลพธของ product ทไดจะมค�ม�กกว�จำ�นวนขอมลท ตวแปรแบบ integer จะเกบได และถ�ห�กมก�รประก�ศตวแปรนเปน
• กจะเกดขอผดพล�ดขนเชนกน เนองจ�กไมไดกำ�หนดค�เรมตนใหกบ ตวแปรน ซงจะทำ�ใหไมส�ม�รถคำ�นวณ product = product * I; ได
• จ�กโปรแกรมนค�ตวเลขค�สงสดจะเปน 99 แตผเขยนโปรแกรมมโอก�สเข�ใจผดโดยเขยนในลกษณะนได
.
• ก�รเขยนโปรแกรมในลกษณะตวอย�งด�นบนนจะเปนก�รคำ�นวณค�3*5*7....97 เนองจ�กในลปสดท�ยค�ของ i มค�เปน 99 ซงทำ�ใหเงอนไข
ของ while เปนเทจ ซงเปนขอผดพล�ดในขณะตรวจสอบเงอนไข ขอผด พล�ดลกษณะนเรยกอกอย�งหนงว� off-by-one-error
• จ�กปญห�เดยวกนน ถ�ห�กเขยนก�รตรวจสอบเงอนไขผดพล�ดกอ�จ ทำ�ใหโปรแกรมทำ�ลปซำ�ไมรจบได อย�งเชนก�รเขยนคำ�สงดงตอไปน
.
• จ�กโปรแกรมจะทำ�ซำ�แลวเพมค� i ไปเรอยๆ แตโปรแกรมจะทำ�ซำ�ไมหยด เนองจ�กตวแปร i จะไมมโอก�สเท�กบ 100 นอกจ�กนยงมโอก�สเปนไป
ไดทผเขยนโปรแกรมจะเขยนโปรแกรมปรบตวแปรควบคมผดทภ�ยในลปอย�งเชนตวอย�งตอไปน
จ�กสวนของโปรแกรมด�นบนจะปรบค� I กอนทจะทำ�ก�รคณ ซงจะ ทำ�ใหเปนก�รห�ค�ของ 5*7*9.......*99*101
.• จ�กก�รเขยนโปรแกรมทผ�นม�ไดศกษ�วธก�รรบขอมลท�งคยบอรดม�
บ�งแลว โดยใชเมธอดในคล�ส Scanner ในภ�ษษจ�ว�ยงส�ม�รถรบค�ท�ง คยบอรดไดอกหล�ยวธ อกวธหนงทนยมใชกน ไดแก ก�รใช
เมธอด read เปนเมธอดทอยในคล�ส System ก�รใชง�นจะตองเรยกใช แพกเกจ java.io และรบขอมลไดจ�กก�รเขยนคำ�สง
เปน System.in.read ก�รใชเมธอดนจะรบขอมลเปนตวอกษร 1 ตว จ�กนน ขอมลทรบเข�ม�จะถกแปลงไปเปนรหส ASCII โดยอตโนมต ก�รเรยกใชคำ�
สงนจะมก�รตรวจจบคว�มผดพล�ดในก�รรบขอมลดวย ซงผเขยน โปรแกรมจะตองใชคำ�สง throws IOException ตอจ�กเมธอด main ดวย
ดงตวอย�ง
ผลลพธโปรแกรมเปนดงนถ�ห�กคยเข�ไป
.
• ก�รเรยกใช System.in.read นนจะรบตวอกขระไดตวเดยว ถ�ห�กตองก�ร รบหล�ยตวส�ม�รถนำ�คำ�สงก�รทำ�ซำ�ม�ใชได และในก�รใชเมธอดน ถ�ห�ก
ไมเรยก java.io.* ดวยคำ�ว� import ในสวนหวของโปรแกรมแลวกส�ม�รถ เรยกใชตอจ�ก throws ได
ผลลพธจ�กก�รทำ�โปรแกรมโดยกดตวอกขระไปทละตว
.
• ตวอย�งโปรแกรมนเปนก�รทำ�ง�นในลกษณะแสดงเมนใหเลอกทำ� ถ�ห�ก ไมกดตวเลขต�มเมนท กำ�หนด โปรแกรมจะวนซำ�ใหปอนขอมลใหม
โปรแกรมนเมอรนโปรแกรมจะแสดงเมนใหเลอก 5 ตวเลอก โดยใหผ ใชปอนตวเลข 1 ถง 5 เข�ไป ถ�ห�กไมปอนตวเลขในชวงน โปรแกรมจะวนลป
ใหปอนตวเลขใหม ถ�ห�กปอนตวเลข 3 ผลลพธของโปรแกรมจะเปนดงน จ�กตวอย�งทผ�นม� ผเขยนโปรแกรมส�ม�รถนำ�ไปใชเปนพนฐ�นในก�ร
ออกแบบใหทำ�ง�นในลกษณะเมนได โดยถ�ห�กมก�รเลอกเมนใดกใหโปรแกรม ไปทำ�ง�นต�มทเลอกตอไป โดยนำ�ก�รเลอกทำ�แบบ switch.. case ม�ใชในก�ร
เลอกตอไป
ขอสอบ1. ก�รเขยนโปรแกรมทนำ�คำ�สง if ในลกษณะต�งๆ ม�ซอนเรยกว�อะไร *• ก. switch• ข. Else• ค. Nested if• ง. Condition
2. นพจนก�รตรวจสอบเงอนไขทต�มหลง if จะเปนขอมลแบบใด *• ก. ท�งตรรก• ข. แบบเงอนไข• ค. กำ�หนดค�• ง. ดำ�เนนก�ร3. คำ�สง switch..case ส�ม�รถใชไดในกรณใด *• ก. เงอนไขทมก�รกำ�หนดค�• ข. เงอนไขทตองตดสนใจขนกบตวแปรเดยว• ค. เงอนไขทถกควบคมกลมตวแปร• ง. เงอนไขทตองแสดงผลลพธของคำ�สง
4. ถ�เขยนโปรแกรมเปนลกษณะเมนควรใชคำ�สงแบบใด *• ก. แบบ switch• ข. แบบ if• ค. แบบ loop• ง. แบบ while5. คำ�สง switch แตกต�งจ�กคำ�สง if อย�งไร *• ก. if คำ�สงเลกทำ�อย�งใดอย�งหนง switch คำ�สงเลอกทำ�จะตองมก�รตรวจสอบเงอนไขกอน• ข. if คำ�สงเลอกทำ�จะตองมก�รตรวจสอบเงอนไขกอน switch คำ�สงเลกทำ�อย�งใดอย�งหนง• ค. switch ตรวจสอบเฉพ�ะคว�มสมพนธหรอลอจกเท�นน if ส�ม�รถทดสอบคำ�สงไดหล�ยอย�ง• ง. switch ส�ม�รถทดสอบคำ�สงไดหล�ยอย�ง if ตรวจสอบเฉพ�ะคว�มสมพนธหรอลอจกเท�นน
6. ตวแปรทใชเลอกทำ�ทอยต�มหลง switch จะตองเปนตวแปรประเภท ใด *
• ก.ตวอกษร• ข. ทศนยม• ค.จำ�นวนเตม• ง. ลป7. ถ�ห�กเงอนไขทตรวจสอบเปนจรงตลอดจะทำ�ใหก�รทำ�ง�นในลปทำ�ซำ!�
แบบไมรจบ เรยกว�อะไร *• ก. loop for• ข. infinite loop• ค. while loop• ง. statement loop
8. ลปแบบ do..while หลงก�รตรวจสอบเงอนไขจะตองมเครองหม�ยใด *• ก. case• ข. semicolon• ค.system• ง. println9. ในภ�ษ�จ�ว�มคำ�สงลปกประเภท ไดแกอะไรบ�ง *• ก. 2 ประเภท ไดแก ลปแบบ while ลปแบบ for• ข. 2 ประเภท ไดแก ลปแบบ switch ลปแบบ if• ค. 3 ประเภท ไดแก ลปแบบ switch ลปแบบ if ลปแบบ case• ง. 3 ประเภท ไดแก ลปแบบ while ลปแบบ for ลปแบบ do..while
10. ลปทง�ยทสดในก�รเขยนโปรแกรมคอ *• ก. ลปแบบ for• ข. ลปแบบ case• ค. ลปแบบ while• ง. ลปแบบ do..while
สม�ชก1. น�ยสย�มรฐ สภ�พ ชนมธยมศกษ�ปท 6/2 เลขท 12 น�ย จตวต กญญ�ด ชนมธยมศกษ�ปท 6/2 เลขท 43. น�ย ภ�นวฒน เปลยนพม ชนมธยมศกษ�ปท 6/2 เลขท 54. น�ย รณกร สำ�เนยงแจม ชนมธยมศกษ�ปท 6/2 เลขท 75. น�งส�ว ก�ญจน� ไพรวน ชนมธยมศกษ�ปท 6/2 เลขท 96. น�งส�ว รชนกร แชมเลก ชนมธยมศกษ�ปท 6/2 เลขท 15