บทที่ 3 คําสั่งควบคุมการทํางานหนาที่ 67
เอกสารประกอบการสอน 305272 การเขียนโปรแกรมคอมพิวเตอรขั้นสูง
อ.สุรางคนา ระวังยศ
เนื้อหาบทเรียน
♦ คําสั่งตรวจสอบเงื่อนไข
- คําสั่ง if
- คําสั่ง switch
♦ คําสั่งวนทําซ้ํา
- คําสั่งลูป while
- คําสั่งลูป for
- คําสั่งลูป do while
♦ คําสั่งควบคุมอื่นๆ
- คําสั่ง break
- คําสั่ง continue
3.
บทที่ 3 คําสั่งควบคุมการทํางานหนาที่ 68
เอกสารประกอบการสอน 305272 การเขียนโปรแกรมคอมพิวเตอรขั้นสูง
อ.สุรางคนา ระวังยศ
คําสั่งควบคุมการทํางาน(Control Statements)
คําสั่งควบคุม
ในการเขียนโปรแกรมโดยปกติแลวจะมีการทํางานตามคําสั่งที่เราไดเขียนโปรแกรมไวเปน
ตามลําดับทีละคําสั่ง โดยอาจแบงได 3 รูปแบบ
ตามลําดับ (Sequence Statements)
ตัดสินใจ (Decision Statements)
วนลูป (Loop Statements)
คําสั่งควบคุมตามลําดับ(Sequence Statements)
เปนการเขียนโปรแกรมลักษณะทํางานตามลําดับของคําสั่งที่มีอยูในโปรแกรม ซึ่งจะเริ่มจาก
คําสั่งแรกใน main Method กอน แลวทําทีละคําสั่งไปจนสิ้นสุดคําสั่งใน main Method
ตัวอยางโปรแกรมแบบคําสั่งควบคุมตามลําดับ
public class Example {
public static void main ( String [] args ) {
System.out.println(“Statement1”);
System.out.println(“Statement2”);
System.out.println(“Statement3”);
System.out.println(“Statement4”);
}
}
ผลลัพธที่ไดคือ
Statement1
Statement2
Statement3
Statement4
คําสั่งตัดสินใจ(Decision Statements)
เปนการตัดสินใจภายใตเงื่อนไขที่เรากําหนดไววาจะทําในคําสั่งใด ซึ่งมีอยู 2 คําสั่ง
คําสั่ง if-else
คําสั่ง switch
คําสั่ง if
เปนคําสั่งที่ใชในการตรวจสอบเงื่อนไขวาเปนจริงหรือเท็จ โดยถาเปนจริงจะใหทํางานใด และ
ถาเปนเท็จจะใหทํางานใด
4.
บทที่ 3 คําสั่งควบคุมการทํางานหนาที่ 69
เอกสารประกอบการสอน 305272 การเขียนโปรแกรมคอมพิวเตอรขั้นสูง
อ.สุรางคนา ระวังยศ
• ไวยกรณ ของ if-else เปนดังนี้:
if (Boolean expression)
statement1;
else
statement2;
Boolean Expression :- ตองมีผลลัพธเปนชนิดขอมูล Boolean เทานั้น
หลักการทํางาน ถา Boolean Expression เปนจริงก็จะทําในคําสั่ง Block แรก ถาเปนเท็จก็จะทํา
ใน Block ของ else จากไวยกรณดังกลาวสามารถจําแนกคําสั่ง if ได 4 รูปแบบ คือ
1. แบบเงื่อนไขเดียว (Simple IF)
มีรูปแบบคือ if (นิพจนตรรก){
นิพจนที่ตองทําเมื่อเงื่อนไขเปนจริง;
}
ถาตรวจสอบเงื่อนไขแลว เปน “จริง” โปรแกรมจะไปทํางานตามคําสั่งตางๆ หลังจาก IF
(ภายในเครื่องหมาย { } ที่อยูภายในคําสั่ง IF )
แตถาเงื่อนไขเปน “เท็จ” โปรแกรมจะไปทํางานกลุมคําสั่งที่อยูหลังเครื่องหมายปกกา } ของ
คําสั่ง IF
หมายเหตุ บรรทัดที่เปนคําสั่ง if จะไมมีเครื่องหมาย Semicolon ( ; ) ปดทาย
ตัวอยาง
if (radius >= 0){
area = radius * pi ;
System.out.println(“Circle Area is ” + area );
}
ตัวอยาง
if (( i >=0 ) and ( i <= 10))
System.out.println(“i is number between 0 to 10 ” ) ;
ตัวอยาง
if (( sex == “m” || sex == “M”))
return “Male”;
5.
บทที่ 3 คําสั่งควบคุมการทํางานหนาที่ 70
เอกสารประกอบการสอน 305272 การเขียนโปรแกรมคอมพิวเตอรขั้นสูง
อ.สุรางคนา ระวังยศ
2. แบบเงื่อนไข (IF...ELSE…)
ใชในกรณีที่มี 2 เงื่อนไข ถาเงื่อนไขเปนจริง ใหทํางานในสวนกลุมคําสั่งหลังเงื่อนไขนั้นๆ ถา
เปนเท็จใหทํางานกลุมคําสั่งหลัง else
มีรูปแบบดังนี้
if (นิพจนตรรก){
นิพจนตาง ๆ เมื่อเงื่อนไขเปนจริง;
}
else{
นิพจนตาง ๆ เมื่อเงื่อนไขเปนจริง;
}
ตัวอยาง
if ( radius >= 0){
area = radius * pi ;
System.out.println(“Circle Area is ” + area );
}
else {
System.out.println(“Radius less than Zero=> Invalid number” );
}
ตัวอยาง
if (( sex == “m” || sex == “M”))
return height-100;
else
return height-110;
6.
บทที่ 3 คําสั่งควบคุมการทํางานหนาที่ 71
เอกสารประกอบการสอน 305272 การเขียนโปรแกรมคอมพิวเตอรขั้นสูง
อ.สุรางคนา ระวังยศ
3. แบบซอน (Nested IF)
ใชในกรณีที่ตองการตรวจสอบเงื่อนไขของ if ใหมากยิ่งขึ้น
รูปแบบที่ 1
if (เงื่อนไขที่ 1 ){
if (เงื่อนไขที่ 2 ){
if (เงื่อนไขที่ 3)
.
.
}
}
else{
นิพจนตาง ๆ เมื่อเงื่อนไขเปนเท็จ;
}
รูปแบบที่ 2
if (เงื่อนไขที่ 1 ){
นิพจนตาง ๆ เมื่อเงื่อนไขเปนจริง;
}
else {
if (เงื่อนไขที่ 2 ){
นิพจนตาง ๆ เมื่อเงื่อนไขเปนจริง;
}
else {
if (เงื่อนไขที่ 3){
นิพจน เมื่อเงื่อนไขเปนจริง;
}
}
}
.
.
.
ตัวอยาง แสดงการทํางานของรูปแบบที่ 1
if ( i > k ) {
if ( j > k )
System.out.println(“i and j more than k ”);
}
else
System.out.println(“i less than or equal to k ”)
7.
บทที่ 3 คําสั่งควบคุมการทํางานหนาที่ 72
เอกสารประกอบการสอน 305272 การเขียนโปรแกรมคอมพิวเตอรขั้นสูง
อ.สุรางคนา ระวังยศ
ตัวอยาง แสดงการทํางานของรูปแบบที่ 2
if ( score >= 80.0 )
grade = “A”;
else if ( score >= 70.0 )
grade = “B”;
else if ( score >= 60.0 )
grade = “C”;
else
grade = “F”;
4. แบบลัด (Shortcut IF)
เปนคําสั่งที่ใชเขียนคําสั่ง if สั้นลง แตใชไดเฉพาะกับ if ที่เปนแบบ 2 เงื่อนไข (if…else) เทานั้น
โดยมีรูปแบบดังนี้
ตัวแปร = (เงื่อนไข) ? คาหรือคําสั่งเมื่อเงื่อนไขเปนจริง : คาหรือคําสั่งเมื่อเงื่อนไขเปนเท็จ
เชน
if (X > 0)
Y = 1
else
Y = -1;
สามารถเขียนใหสั้นลงดังนี้ : Y = (X>0) ? 1 : -1;
ตัวอยาง การใช ? เพื่อหา Absolute (แปลงคาหรือลบใหเปนคาบวกเทานั้น)
class Ternary {
public static void main(String[ ] args) {
int i,k ;
i = 10;
k = i < 10 ? –i : i ;
System.out.print( “Absolute Number is ” + i + “=” + k );
i = -10;
k = i < 10 ? –i : i ;
System.out.print( “Absolute Number is ” + i + “=” + k );
}
}
8.
บทที่ 3 คําสั่งควบคุมการทํางานหนาที่ 73
เอกสารประกอบการสอน 305272 การเขียนโปรแกรมคอมพิวเตอรขั้นสูง
อ.สุรางคนา ระวังยศ
ตัวอยาง
public class DemoIfElse1 {
public static void main(String[] args) {
int testscore = 76;
char grade;
if (testscore >= 90) {
grade = 'A';
} else if (testscore >= 80) {
grade = 'B';
} else if (testscore >= 70) {
grade = 'C';
} else if (testscore >= 60) {
grade = 'D';
} else {
grade = 'F';
}
System.out.println("Grade = " + grade);
}
}
ตัวอยาง การใช if-else-if
import java.io.*;
public class DemoIfElse2 {
public static void main (String args[]) throws IOException {
BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in));
System.out.println("Press mounth (1 - 12) ");
String input = " ";
input = stdin.readLine();
int month = Integer.parseInt(input);
String season;
if (month ==1 || month ==2 || month==3)
season = "Medium Hot”;
else if (month ==4 || month ==5 || month==6)
season = "Very Hot”;
else if (month ==7 || month ==8 || month==9)
season = "Hard Rainy";
else if (month ==10 || month ==11 || month==12)
season = "Min Hot";
else
season = "ERROR";
System.out.println ("Month " + month + " = " + season );
}
} // ifElse
บทที่ 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
บทที่ 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; } } }