CS313: Object-Oriented Programming
บทที่ 3: Control Structures
บทที่ 3 Control Structures 3.1 Statements and Expressions Statement เปนคําสั่ง (code) ทีร่ ะบุการทํางานในโปรแกรม ในภาษา Java แตละ statement จะตอง จบดวยเครื่องหมาย semicolon (;) Expression เปน statement ทีม่ กี ารสงคากลับ (return value) Block เปนกลุมของ statement ซึง่ อยูภายใตเครื่องหมาย { } ตัวอยาง Statement: import java.awt.Font; int a = 10; s.firstName = “Robert”; Expression: x == y; x + y; Block: if (grade >= 60) { System.out.println (“Passed”); System.out.println (“Congratulations!!”); }
3.2 Variable Variable หรือ ตัวแปร เปนตําแหนงของหนวยความจําที่ใชในการเก็บขอมูล เนือ่ งจากชื่อของตัวแปร เปนการอางอิงถึงตําแหนงของหนวยความจํา ดังนั้นทุกๆ ตัวแปรจะประกอบดวยชื่อ ชนิดตัวแปร และคาขอมูลที่ เก็บไว 3.3 Variable Types ชนิดตัวแปรในภาษา Java มี 3 แบบ คือ - Base data types - Array - User defined type (class) 3.4 Base Data Types (Primitive Data Types) Base data types เปนชนิดขอมูลที่ถูกกําหนดมาจากระบบภาษา Java (built-in) base data type ไมใช object และขนาดของขอมูลไมขึ้นกับชนิดของเครื่องคอมพิวเตอรที่ใชงาน (machine-independent) - byte 1 byte -128 ถึง +127 - boolean 1 byte true หรือ false - char 2 byte ISO Unicode character set ( Unicode เปนระบบ การแทนรหัสขอมูล โดยจะสามารถใชแทนรหัสไดทั้งรหัส ASCII และอักษรที่มาจากภาษาอื่น เชน ภาษาญี่ปุน ภาษาจีน และ ภาษาเกาหลี โดยในการแทนขอมูลตัวอักษรแบบ ASCII ของ Unicode 9 บิตแรกจะถูก set ให 2/2545
1
CS313: Object-Oriented Programming
บทที่ 3: Control Structures
มีคา เทากับ 0 และบิตที่เหลือจะแสดงในรหัส ASCII สวนอักษรอื่นจะถูกกําหนดโดยใชรูปแบบ “\Uxxxx” เมื่อ xxxx เปนเลขฐาน 16 จํานวน 4 ตัว เพื่อแสดงรหัสขอมูลตัวอักษรนั้นๆ ) - short 2 byte -32,768 ถึง +32,767 - int 4 byte -2,147,483,648 ถึง +2,147,483,647 - long 8 byte -9,223,372,036,854,775,808 ถึง +9,223,372,036,854,775,807 - float 4 byte -3.40292347E+38 ถึง +3.40292347E+38 - double 8 byte -1.79769313486231570E+308 ถึง +1.79769313486231570E+308 ภาษา Java ไมมีชนิดขอมูลแบบ unsigned ซึง่ ตางจากภาษา C หรือ C++ 3.5 Variable Declaration ตัวแปรทุกตัวในภาษา Java ตองมีการประกาศกอนที่จะถูกใชงาน โดยมีรูปแบบการประกาศตัวแปร ดังนี้ type name [= initial_value];
ตัวอยาง int id, age = 50; String firstName, lastName; Boolean isHired = false;
ตัวแปรแบบ local variable จะตองมีการกําหนดคาเริ่มตนใหทุกครั้งกอนที่จะถูกเรียกใช สวนตัวแปร แบบ instance (object) และ class คาเริม่ ตนจะถูกกําหนดโดยอัตโนมัติ ซึ่งจะเปนคาใดนั้นขึ้นอยูกับชนิดขอ มูลทีก่ ําหนดใหตัวแปรนั้นๆ เชน ตัวแปรชนิด char, byte, short, int, long, float และ double จะมีคาเริ่มตนเทา กับ 0 สวนตัวแปรชนิด boolean มีคา เริ่มตนเทากับ false 3.6 Variable Assignment การกําหนดคาใหกับตัวแปรทําไดโดยใชเครื่องหมาย ‘=’ ตัวอยาง id = 12345; isHired = true; firstName = “Robert”; a = b = c = 2;
3.7 Literals Java จะกําหนดชนิดขอมูลใหกับตัวแปรที่เก็บคาคงที่ใหอัตโนมัติโดยพิจารณาจากคาคงที่ที่เก็บ คาคง ทีใ่ นภาษา Java มี 4 แบบ คือ - คาคงที่ตัวเลข (number literal) เชน 123 เปนชนิดขอมูลแบบ int 3.456 มีชนิดขอมูลแบบ double หากตองการกําหนดชนิดขอมูลใหเปนแบบอื่น ทําได ดังนี้ ชนิดขอมูลแบบ long ใหพิมพ 2/2545
2
CS313: Object-Oriented Programming
-
บทที่ 3: Control Structures
อักษร L ตอทายตัวเลข ( เชน 123L ) สวนชนิดขอมูลแบบ float ทําไดโดยพิมพอักษร F ตอทาย ตัวเลขนั้น ( เชน 3.456F ) คาคงที่แบบตรรกะ (boolean literal) มีเพียง 2 คาเทานั้น คือ true กับ false คาคงที่แบบอักขระ (character literal) ตัวอักขระตองอยูภายในเครื่องหมาย single quote เชน ‘a’ คาคงที่แบบสายอักขระ (string literal) สายอักขระตองอยูภายในเครื่องหมาย double quote เชน “test”
3.8 Arithmetic Operators ภาษา Java มี arithmetic operator 5 ตัว คือ + (บวก), - (ลบ), * (คูณ), / (หาร), และ % (modulus) 3.9 Shorthand Assignment Operator - increment by n: ตัวอยาง x+= n; - decrement by n: ตัวอยาง x -= n; - multiply by n: ตัวอยาง x *= n; - divide by n: ตัวอยาง x /= n; - increment by 1: ตัวอยาง x++; - decrement by 1: ตัวอยาง x- -;
// same as x = x + n; // same as x = x – n; // same as x = x * n; // same as x = x / n; // same as x = x + 1; // same as x = x – 1;
3.10 Prefix and Postfix ตําแหนงของเครื่อง ++ หรือ - - มีผลตอผลลัพธที่จะเกิดขึ้น ดังนี้ - Prefix: y = ++x; // same as x = x+1; y = x นั่นคือเพิ่มคา x อีก 1 กอน แลวจึงกําหนดคาให กับ y เชน ถาคาของ x เทากับ 2 ดังนั้นเมื่อทําคําสั่งนี้เสร็จ ผลลัพธที่ไดคือ y และ x มีคาเทากับ 3 - Postfix: y = x++; // same as y = x; x = x+1; เปนการกําหนดคา x ใหกับ y กอนที่จะเพิ่มคาให กับ x อีก 1 เชน ถาคาของ x เทากับ 2 ดังนั้นเมื่อทําคําสั่งนี้เสร็จ ผลลัพธที่ไดคือ y เทากับ 2 และ x เทากับ 3 การเขียนโปรแกรมโดยใช prefix และ postfix เชนนี้ ทําให expression สัน้ แตอาจทําใหเกิดการสับ สนไดงาย 3.11 Comparison Operators Comparison operator ในภาษา Java มีทงั้ หมด 6 ตัว ดังนี้ == ( equal ), != ( not equal ), < ( less than ) > ( greater than ), <= ( less than or equal ), >= ( greater than or equal ) ผลลัพธที่ไดคือคา boolean ( true หรือ false)
2/2545
3
CS313: Object-Oriented Programming
บทที่ 3: Control Structures
3.12 Logical Operators && (AND), || (OR), ! (NOT) 3.13 Bitwise Operators มีทั้งสิ้น 13 ตัว ดังนี้ - & ( bitwise AND) - | (bitwise OR) - ^ (bitwise XOR) - << (left shift) - >> (right shift) - >>> (zero fill right shift) - ~ (bitwise complement) ตัวอยาง - 0x0005 && 0x0003 มีคาเทากับ 0x001 - 0x002 << 2 มีคาเทากับ 0x0008 - ~0xFEFE มีคาเทากับ 0x0101
&= (AND assignment) != (OR assignment) ^= (XOR assignment) <<= (left shift assignment) >>= (right shift assignment) >>>= (zero fill right shift assignment)
3.14 Operator Precedence 1. . [ ] ( ) 2. ++ - - ! ~ instanceof 3. new ( type ) expression 4. * / % 5. + 6. << >> >>> 7. < > <= >= 8. = = != 9. & 10. ^ 11. | 12. && 13. || 14. ?: (ternary conditional shorthand for if… then …. else…) 15. = += -= *= /= %= ^= &= |= <<= >>= >>>=
2/2545
4
CS313: Object-Oriented Programming
บทที่ 3: Control Structures
3.15 String Arithmetic การเชื่อมสายอักขระ (string concatenation) ทําไดโดยใชเครื่องหมาย ‘+’ เชน “Hello “ + “friends” ไดผลลัพธคือ “Hello friends” นอกจากนี้ยังสามารถใชเครื่องหมาย ‘=+’ กับการเชื่อมสายอักขระเชนกัน ตัวอยาง str = “Hi “; str += “friends”; ผลลัพธ str จะเทากับ “Hi friends” 3.16 if Conditional if (condition) { ... // condition is true ... } else { ... // condition is false ... }
เครื่องหมาย { } จะถูกใชเมือ่ มีคําสั่งมากกวา 1 คําสั่งที่ตองทํางานใน block นั้นๆ ตัวอยาง Pseudocode statement If student's grade is greater than or equal to 60 Print "Passed" Else Print "Failed"
Java statement if ( studentGrade >= 60 ) System.out.println ( "Passed" ); else System.out.println ( "Failed" );
3.17 switch Conditional switch (x) { case valueOne: ... // x is valueOne break; case valueTwo: ... // x is valueTwo break; default: ... // other value of x }
คา x มีชนิดขอมูลเปนแบบ byte, short, int, long และ char เทานั้น
2/2545
5
CS313: Object-Oriented Programming
บทที่ 3: Control Structures
ตัวอยาง Pseudocode statement choice = 1 : draw lines choice = 2 : draw square choice = 3 : draw circle
Java statement switch ( choice ) { case 1: g.drawLine ( 10,10,250,10 ); break; case 2: g.drawRect ( 10,10,50,50 ); break; case 3: g.drawOval (10,10,50,50 ); break; default: System.out.println ("Invalid choice"); }
3.18 for Loop for (part1; part2; part3) { ... ... }
part1 : การกําหนดคาเริ่มตน (initialisation) part2: จุดสิ้นสุด loop (terminating condition) part3: คําสัง่ ใดๆ โดยสวนใหญจะเปนคําสั่งในการเปลี่ยนแปลงคา index ซึง่ จะมักสอดคลองกับตัว แปรใน part2 ตัวอยาง Pseudocode statement sum = 0 for ( n=1 to 100 ) sum = sum + n
Java statement int sum = 0; for ( int n = 1; n <= 100; n++ ) sum += n
3.19 while Loop while (condition) { ... ... }
ทํางานใน loop ในขณะที่ของ condition เทากับ true โดยจะทําการเช็คเงื่อนไขกอนการเขา loop
2/2545
6
CS313: Object-Oriented Programming
บทที่ 3: Control Structures
ตัวอยาง Pseudocode statement product = 2; while product is less than or equal to 1000 product = product x 2
Java statement int product = 2; while ( product <= 1000 ) product = product * 2;
3.20 do .. while Loop do { ... ... } while (condition);
ทํางานใน loop จนกระทั่งคาของ condition เทากับ false โดยคําสั่งตางๆ ใน loop นีจ้ ะถูกทําอยาง นอย 1 ครั้ง ตอนเขา loop ตัวอยาง Pseudocode statement counter = 1 do { print "Line number " + counter counter = counter + 1 while counter is less than or equal to 10
Java statement int counter = 1; do { System.out.print ( "Line number" ); System.out.println ( counter ); ++counter; } while ( counter <= 10 );
3.21 Loop Label เปนการตั้งชื่อ loop เพือ่ ใชรวมกับคําสั่ง break ตัวอยาง Loop1: while (x < 10) { for ( y=0; y<x; y++) { ... ... if (f1(y) < 100) break Loop1; } x = 2*x; } f2( );
จากตัวอยาง หากคา f1(y) นอยกวา 100 การทํางานจะออกจาก loop ทีช่ ื่อวา Loop1 นัน่ คือจะไป ทํางานที่คําสั่ง f2( ); หากสั่งเฉพาะ break; การทํางานจะออกจาก loop for แลวไปทํางานตอที่คําสั่ง x = 2*x; 2/2545
7
CS313: Object-Oriented Programming
บทที่ 3: Control Structures
ตัวอยาง: โปรแกรมประเภท GUI สําหรับหาคาเฉลี่ยของตัวเลข 10 จํานวนที่รับมาจากผูใช import javax.swing.JOptionPane; public class Average { public static void main ( String args[] ) { int sum, n, num, avg; String value; // initialise sum to zero sum = 0; for ( n=1; n<=10; n++) { // get a number from user value = JOptionPane.showInputDialog ("Enter number: "); // convert the number (value) from a String to an integer num = Integer.parseInt (value); // add num to sum sum = sum + num; } // end of for loop // calculate the average avg = sum / 10; // perform integer division // display the average of all 10 numbers JOptionPane.showMessageDialog (null, "Average number is "+avg, "Average", JOptionPane.INFORMATION_MESSAGE ); System.exit(0); // terminate the program } // end of method main } // end of class Average
ตัวอยาง: เปนการแสดง '*' ในรูปของสามเหลี่ยม public class PrintStar { public static void main ( String args[] ) { for (int row=1; row <=5; row++) { System.out.println(); for (int col=1; col <= row; col++) { System.out.print("*"); } // end of for 'col' }
// end of for 'row'
} // end of method main } // end of class PrintStar
2/2545
8