บทที่ 7

Download Report

Transcript บทที่ 7

คำสั่ งวนซำ้
คำสั่ ง loop ในภำษำจำวำ
ประกอบดวย
3 ชุดคำสั่ ง ไดแก
้
้ ่
– while
– do-while
– for
ส่วนประกอบของคำสั่ ง loop
1. คำตั
่ ง้ ตน
้ (Initial)
– กำรกำหนดคำเริ
่ ตนส
่ ม
้ ำหรับกำรวนทำซำ้
– รอบแรกของ loop จะนับวำเป็
่ นรอบทีเ่ ทำไหร
่
่
2. เงือ
่ นไข (Condition)
– ถำเงื
่ นไขเป็ นจริง จะวนทำซำ้ ไปเรือ
่ ยๆ
้ อ
– หยุดทำซำ้ เมือ
่ เงือ
่ นไขเป็ นเท็จ
3. กำรเปลีย
่ นรอบ (Update)
– ถำไม
ระบุ
โปรแกรมจะทำงำนซำ้ ไมรู่ จบ
้
่
้
กำรเขียนคำสั่ ง for
รูปแบบคำสั่ ง
for(Initial ; Condition ; Update) {
คำสั่ ง ;
ตรวจสอบเงือ
่ นไขวำเป็
่ นจริงหรือ
}
• ถำเป็
้ นจริง จะทำทุกคำสั่ งภำย
ตัวอยำง
• ถำเป็
่
้ นเท็จ ก็จะจบกำรทำงำน
for(int i = 1 ; i <= 5 ; i++) {
System.out.println(i+ “ ”);
}
โจทย ์
• จงเขียนโปรแกรมแสดงเลขคู่ 900 ตัวแรก
ออกทำงหน้ำจอ เริม
่ เลขตัวแรกที่ 78
• จงเขียนโปรแกรมเพือ
่ รับตัวเลขจำนวนเต็ม 1
จำนวนเก็บไวในตั
วแปร n และหำคำ่
้
แฟคทอเรียล (Factorial) ของจำนวนนั้น
– คำแฟกทอเรี
ยลของเลขใดๆ คือ ผลคูณของ
่
ตัวเลขตัง้ แต่ 1 จนถึงเลขนั้น เช่น 4! = 1 x 2 x
3x4
กำรเขียนคำสั่ ง while
• มี 3 ส่วน เช่นเดียวกับคำสั่ ง for แตเขี
่ ยน
แยกกันคนละบรรทัด ตัวอยำง
่
• รูปแบบคำสั่ ง
int i = 1;
while(i <= 5){
Initial;
System.out.println(i
+
while(Condition) {
i++;
คำสั่ ง ;
}
Update
ตรวจสอบเงือ
่ นไขวำเป็
่ นจริงหรือไม่
}
• ถำเป็
้ นจริง จะทำทุกคำสั่ งภำยในปี กกำ whi
• ถำเป็
้ นเท็จ ก็จะจบกำรทำงำนของ loop
โจทย ์
• แสดงคำวำ่ “JAVA” ทำงหน้ำจอ 100 ครัง้
• แสดงเลขคู่ 10 ตัวแรกทำงหน้ำจอ โดย
เริม
่ ตนที
้ เ่ ลข 2
เปรียบเทียบคำสั่ ง while และ
คำสั่ ง for
• ทัง้ 2 คำสั่ งมีลก
ั ษณะกำรทำงำนเหมือนกัน
แตมี
ู แบบกำรเขียนทีแ
่ ตกตำงกั
น
่ รป
่
• แลวมั
้ นใช่แทนกันไดทุ
้ กกรณีใช่หรือไม่
– คำสั่ ง while เหมำะกับงำนทีม
่ ก
ี ำรทำซำ้ แตเรำไม
่
่
รูจ
่ น่นอน
้ ำนวนรอบทีแ
– คำสั่ ง for เหมำะกับงำนทีม
่ ก
ี ำรทำซำ้ โดยทรำบ
จำนวนรอบทีแ
่ น่ชัด
งำนแบบไหนทีไ่ มทรำบจ
ำนวนรอบ
่
ชัดเจน
• เขียนโปรแกรมหำผลบวก โดยโปรแกรมจะรับ
เลขจำนวนเต็มจำกทำงแป้นพิมพมำเรื
อ
่ ยๆ
์
จนกวำผู
พธ ์
่ ใช
้ ้จะป้อนเลข 0 แลวแสดงผลลั
้
ทำงหน้ำจอ
กำรเขียน loop ดวยค
ำสั่ ง
้
while(true)
่ นไขทีเ่ ป็ น
• คำสั่ ง while (true) เป็ นกำรใส่เงือ
จริงตลอดกำล ดังนั้น คำสั่ งทีอ
่ ยูในนี
จ
้ ะถูก
่
ทำงำนแบบไมรู่ จบ
้
• หำกตองกำรให
้ loop จบ ทำไดวิ
้
้ ธเี ดียวคือ
กำรใช้คำสั่ ง if()… break;
– ถำเงื
่ นไขใน if เป็ นจริง ให้หยุดกำรทำงำนของ
้ อ
loop
ตัวอยำง
่
Scanner kb = new Scanner(System.in);
while(true) {
int x = kb.nextInt();
โปรแกรมจะวนรับจำนวนเต็ม
แลวตรวจสอบว
ำเลขนั
้นเป็ น 0
if(x == 0) break;
้
่
ถำใช
ก็จบกำรทำงำนของ loo
้
่
}
ถำไม
ใช
่
้
่ ่ ก็จะวนรับขอมู
้ ลไปเรือ
กำรกระโดดออกจำก loop
• โดยใช้คำสั่ ง if ( เงือ
่ นไข) break;
• เรำไมสำมำรถใช
้คำสั่ ง break โดดๆโดยไมมี
่
่ if
เพือ
่ กระโดดออกจำกวงวน
เมือ
่ เขำมำใน
้
• แมท
่ ำมหลัwhile
ง break จะไมท
้ ำได้ คำสั่ งทีต
่ ำงำน
โปรแกรมจะ
เลย (เรำจะเขียนไปทำไม)
กระโดด
ออกไปบรรทัด
7 เลย
12
โจทย ์ (ใช้คำสั่ ง while(true))
• แสดงคำวำ่ “เกรียน” ทำงหน้ำจอ 100 ครัง้
• เขียนโปรแกรมรับเลขตัง้ แต่ 0 -10 แลว
้
แสดงผลทำงหน้ำจอไปเรือ
่ ยๆ จนกวำตั
่ วเลขที่
รับเขำมำเป็
นเลข 5
้
กิจกรรม
โปรแกรมตอไปนี
้แสดงผลลัพธอย
่
์ ำงไร
่
1.
2.
14
กิจกรรม
โปรแกรมตอไปนี
้แสดงผลลัพธอย
่
์ ำงไร
่
3.
4.
15
If() … continue
• เรำใช้ if … break เพือ
่ กระโดดออกจำก
Loop ทีค
่ ำสั่ งนี้อยู่
• แตในบำงครั
ง้ บำงรอบของกำรทำงำนใน
่
loop เรำอำจจะตองกำรให
ำงำน
้
้มันขำมกำรท
้
ไป ไมต
่ รรทัด
ำ (ให้กระโดดกลับไปทีบ
่ องท
้
แรกของ loop)
• ตัวอยำงเช
่
่ น ให้เขียนโปรแกรมคำนวณ
คำอำหำรบุ
ฟเฟ่ต ์ โดยรับขอมู
ละ
่
้ ลของลูกคำแต
้
่
คนมำเรือ
่ ยๆ (ขอมู
่ ้ อนเขำ้
้ ลอำยุ) จนกวำค
่ ำที
่ ป
มำจะเป็ น 0 หรือ เลขติดลบ แลวแสดง
้
คำอำหำรทั
ง้ หมดทำงหน้ำจอ
่
16
ตัวอยำง
่
1: public static void main(String[] args) {
2:
Scanner kb = new Scanner(System.in);
3:
int sum = 0;
4:
while(true){
5:
System.out.print("Enter age : ");
6:
int age = kb.nextInt();
7:
if(age <= 0)break; // อำยุเป็ น 0 หรือติดลบ ให้ออกจำก
loop
// อำยุน้อยกวำ่ 5 ไมคิ
่ ดเงิน มันจะ
8:
if(age < 5 ) continue;
กระโดดไปทีบ
่ รรทัด 5 โดยไมสนใจค
ำสั่ ง
่
9:
sum = sum + 199;ดำนล
ำงมั
น ไมว
กค
ี่ ำสั่ งก็ตำม
้
่
่ ำจะมี
่
10:
}
11:
System.out.println("Total price : "+sum);
12:
}
if … continue
• if … continue คือ คำสั่ งทีเ่ มือ
่ เงือ
่ นไขหลัง if เป็ น
จริง continue จะทำให้วนกลับไปทำบรรทัดแรกของ
loop ทีค
่ ำสั่ งนี้อยูทั
่ นที
18
โจทย ์
• จงเขียนโปรแกรมเพือ
่ รับเลขจำนวนเต็ม 1
จำนวนเขำมำเก็
บไวในตั
วแปร n แลว
้
้
้
คำนวณหำผลบวกของเลขคีต
่ ง้ั แต่ 1 ถึง n ที่
หำรดวย
3 ลงตัว พรอมทั
ง้ แสดงผลลัพธทำง
้
้
์
หน้ำจอ
คำสั่ ง do-while
รูปแบบคำสั่ ง
ตัวอยำง
่
Initial
int i = 1;
do {
do {
คำสั่ ง ;
System.out.print(i + “”);
Update
i++;
} while(Condition) ;
} while(i <=
5);
โจทย ์
• จงเขียนโปรแกรมเพือ
่ คำนวณหำคำของสมกำร
่
ตอไปนี
้ แลวแสดงผลลั
พธทำงหน
่
้
์
้ ำจอ
–
–
while VS. do-while
• จำกรูปแบบคำสั่ ง while () ทีจ
่ ะทำกำรทดสอบเงือ
่ นไขกอน
่
หำกเป็ นจริง จะวนท
่ ยๆ
่ ำสั่ งไปเรือ
Initialำกลุมค
while (Condition) {
//กลุม่ คำสัง่ A
Update
}
กอนจะท
ำกลุมค
่ นไข P กอน
ถ้ำ
่
่ ำสั่ ง A จะตรวจสอบเงือ
่
เป็ นจริงถึงจะทำ
• ส่วนรูปแบบกำรทInitial
ำงำนของคำสั่ ง do-while แสดงได้ ดังนี้
do {
//กลุม่ คำสัง่ B
update
} while ( Condition) ;
22
while VS. do-while
• บำงคนอำจจะเริม
่ สั บสน หรือเขำใจผิ
ดวำค
้
่ ำสั่ ง
while กับ do-while เหมือนกัน
• ทัง้ 2 คำสั่ ง ให้กำรทำงำนทีแ
่ ตกตำงกั
น
่
เล็กน้อย
– คำสั่ ง while เปรียบเหมือน กำรคิดกอนท
ำ
่
• กอนที
จ
่ ะทำจะตองตรวจสอบเงื
อ
่ นไขกอน
ถำเงื
่ นไข
่
้
่
้ อ
เป็ นจริง คำสั่ งจึงจะถูกทำ
– คำสั่ ง do-while เปรียบเหมือย กำรทำกอนแล
ว
่
้
คอยคิ
ด
่
• ทำไปกอน
1 รอบ แลวค
คเงือ
่ นไข ถำ้
่
้ อยมำเช็
่
เงือ
่ นไขเป็ นจริง ก็คอยท
ำเอง
่
ขอควรระวั
ง
้
int x = kb.nextInt();
int x = kb.nextInt();
do {
while(x > 0) {
System.out.println(x
System.out.println(x
);
);
x = kb.nextInt();
x = kb.nextInt();
}Input
while(x
} Input :
: > 0) ;
-5
Output :
-5
Output
:
กิจกรรม
• Code ของโปรแกรมตอไปนี
้แสดงคำอะไรทำง
่
่
หน้ำจอ
int a = 6;
do{
System.out.println(“a = “ + a);
System.out.println(“In do-while
loop”);
} while(a ! = 6);
System.out.println(“Out of do-while
25