บทที่ 2
Modern Programming Languages
2
คอมเมนต การตั้งชื่อ ชนิดของขอมูล ตัวดําเนินการ คําสั่งในการตัดสินใจและการวนรอบ 2.1 คอมเมนต (Comment)
คอมเมนตคือขอความที่เขียนแทรกอยูในโปรแกรม เพื่อชวยใหผูพัฒนาโปรแกรมสามารถแกไขปรับปรุงหรือ พัฒนาโปรแกรมไดงายขึ้น แตจะไมมีผลตอการทํางานของโปรแกรม เนื่องจากตัวคอมไพเลอร จะไมทําการแปล ขอความที่เปนคอมเมนต รูปแบบคอมเมนตในภาษาจาวามี 3 รูปแบบคือ 1. คอมเมนตขอความบรรทัดเดียว : // comment on one line
2.
คอมเมนตขอความมากกวาหนึ่งบรรทัด : /* comment on one line or more lines */
3.
คอมเมนตสําหรับขอความที่ตองการสรางเปนไฟลเอกสาร : /** documenting comment , is used to generate documents using javadoc */
การสรางไฟลเอกสารจะใชโปรแกรม javadoc.exe จะไดไฟลเอกสาร HTML
[email protected]
1/25
บทที่ 2
Modern Programming Languages
วิธีการสรางเอกสารการใชโปรแกรมจากตัวอยาง Employee.java
1. 2.
3.
4.
ทําการสรางไฟลจาวา โดยคอมเมนตขอความที่ตองการสรางเปนเอกสาร โดยพิมพตัวอยางตาม โปรแกรม Employee.java ดังรูปดานบน เรียกใชโปรแกรม javadoc.exe ที่ดอส ดังนี้ a. พิมพคําสั่ง javadoc Employee.java b. จะไดไฟล Employee.html ที่แสดงรายละเอียดการใชออบเจกต Employee ทําการพิจารณาที่เอกสารการใชโปรแกรมที่ได สังเกตุไดวาขอความที่อยูในคอมเมนตที่เปนรูปแบบ การสรางเอกสารจะไปปรากฏแสดงเปนรายละเอียดในไฟล Employee.html โดยจะมีตารางสรุป รายละเอียดของตัวแปรออบเจกตและเมธอดของออบเจกต Employee ในรายละเอียดของเมธอด incSalary ดังรูปดานลาง มีการสงคากลับ ใหสังเกตที่คอมเมนต จะตองมี @return นําหนาขอความที่ตองการแสดงในกรอบวงรี
[email protected]
2/25
บทที่ 2
Modern Programming Languages
2.2 การตั้งชื่อ
การตั้งชื่อคลาส ชื่อตัวแปร ชื่อของเมธอด หรือชื่อของคาคงที่ มีกฎในการตั้งชื่อดังนี้ • อักษรตัวแรกตองขึ้นตนดวย A-Z, a-z, _ (underscore) หรือ $ (dollar sign) • ตัวอักษรหลังจากตัวแรกสามารถเปนตัวเลขได (0-9) • ตัวอักษรพิมพเล็กและพิมพใหญตางกัน (case sensitive) • ชื่อตองไมตรงกับคียเวิรด (keyword) คียเวิรด คือ ชื่อที่คอมไพเลอรในภาษาจาวารูจักและเขาใจความหมายหรือเรียกวา “คําสงวน” มีดังนี้ abstract
boolean
break
byte
case
catch
char
class
const
continue
default
do
double
else
extends
final
if
implements
finally
float
for
goto
long
native
import
instanceof
int
interface
public
return
new
package
private
protected
synchronized
this
short
static
super
switch
throw
throws
transient
try
void
volatile
while
แนวทางการตั้งชื่อที่นิยมเปนดังนี้ • การตั้งชื่อคลาส o ขึ้นตนดวยอักษรพิมพใหญแลวตามดวยอักษรพิมพเล็กหรือตัวเลข o โดยจะใช อั ก ษรพิ ม พ ใ หญ เ ป น อั ก ษรนํ า ของแต ล ะคํ า ที่ ต ามมาในชื่ อ คลาสนั้ น เช น CapitalizeEveryWord •
•
การตั้งชื่อคาคงที่ o จะใชอักษรพิมพใหญทั้งหมด โดยจะใช _ (underscore) ขั้นระหวาง o คําที่ตามมาในชื่อคาคงที่ เชน CAPITALIZE_WITH_UNDERSCORES การตั้งชื่อตัวแปรและการตั้งชื่อเมธอด o ขึ้นตนดวยอักษรพิมพเล็ก โดยจะใชอักษรพิมพใหญเปนอักษรนําของแตละคําที่ตามมาในชื่อตัว แปรหรือชื่อเมธอด เชน startLowercaseCapitalize ตัวอยางการตั้งชื่อตัวแปร : name, numberOfWheels, largestInteger ตัวอยางการตั้งชื่อเมธอด : getName, startEngine, setNumber
2.3 ชนิดของขอมูล
ภาษาจาวาเปนภาษาที่ตองกําหนดชนิดขอมูลใหชัดเจน เรียกวา “strongly-typed” กลาวคือขอมูลที่เปนตัว แปรในภาษาจาวาจะตองมีการประกาศตัวแปร และจะตองระบุชนิดดวยเสมอ ภาษาจาวาแบงชนิดขอมูลเปน 2 แบบ คือ - ชนิดขอมูลแบบพื้นฐาน (primitive types) - ชนิดขอมูลแบบอางอิง (reference types)
[email protected]
3/25
บทที่ 2
Modern Programming Languages
ชนิดขอมูลแบบพื้นฐาน (primitive types) • ขอมูลตัวเลขจํานวนเต็ม (integer)
•
ชนิด
ขนาด
ชวงของขอมูล
(type) byte short int long
(bytes) 1 2 4 8
(valid range) -128 to 127 -32768 to 32767 -2147483648 to 2147483647 About -9.223*1018 to 9.223*1018
ขอมูลตัวเลขจํานวนจริงหรือเลขทศนิยม (real number) ชนิด
ขนาด
ชวงของขอมูล
(type) float
(bytes) 4
(valid range) ~ -3.4028e38 to 3.4028e38 (6-7 หลัก)
double
8
~ -1.7976e308 to 1.7976e308 (15 หลัก)
การกําหนดขอมูลคาคงที่ของเลขทศนิยมใหเปนชนิด float จะตองใส f หรือ F ตอทายตัวเลข นั้น เชน 7.77f หรือ 7.77F * ขอมูลคาคงที่ของเลขทศนิยม จะถูกกําหนดคาเปนชนิด double อยูแลว ไมจําเปนตองใส d หรือ D ตอทายก็ได • ขอมูลอักขระ (textual) ชนิด
ขนาด
ชวงของขอมูล
(type) char
(bytes) 2
(valid range) 0-65535 ( /u0000 - /uFFFF )
ขอมูลอักขระแบบ unicode o ขอมูลคาคงที่จะอยูในเครื่องหมาย ‘ (single quote) เชน ‘a’ o สามารถใชเครื่องหมาย \ ไวขางหนา เชน \r, \n, \t, \b, \’, \”, \\ ขอมูลตรรกะ (logical) o
•
ชนิด
ขนาด
ชวงของขอมูล
(type) boolean
(bytes) 1
(valid range) true และ false
ตัวอยางชนิดขอมูลแบบพื้นฐาน int x,y; //ประกาศตัวแปร x และ y เปนจํานวนเต็ม float z = 3.1414f; //ประกาศตัวแปรเปนเลขทศนิยมชนิด float และกําหนดคาใหกับตัวแปร z double w = 1.1411; //ประกาศตัวแปรเปนเลขทศนิยมชนิด double และกําหนดคาใหกับตัวแปร w boolean bTruth = true; //ประกาศตัวแปรชนิดตรรกะและกําหนดคาใหตัวแปร bTruth เทากับคาจริง char c; //ประกาศตัวแปร c เปนอักขระ c= 'A’; //กําหนดคาใหตัวแปร c
[email protected]
4/25
บทที่ 2
Modern Programming Languages
ชนิดขอมูลแบบอางอิง (reference types) • สตริง, อะเรย, คลาส, และอินเตอรเฟซ เปนขอมูลแบบอางอิง • จะตองใช new เพื่อจองหนวยความจําและกําหนดคาเริ่มตน • สตริง (String) เปนคลาสที่กําหนดไวในภาษาจาวา • ตัวแปรที่เปนสตริง ก็คือ object ชนิดหนึ่ง การแปลงชนิดขอมูล (Casting) การแปลงชนิดขอมูล คือ การแปลงขอมูลชนิดหนึ่ง ไปเปนขอมูลอีกชนิดหนึ่ง เพื่อใหชนิดขอมูลสองชนิด มีความสอดคลองกัน เชน
ผลลัพธที่ได
ขอควรระวังในการแปลงขอมูล!!! ในการแปลงชนิดขอมูลที่มีขนาดใหญกวา ไปเปนชนิดขอมูลที่มีขนาดเล็กกวา อาจมีผลทําใหสูญเสีย ขอมูลบางสวนได เชน
ผลลัพธที่ได
[email protected]
5/25
บทที่ 2
Modern Programming Languages
จากโปรแกรม LostCasting.java เกิดการสูญเสียขอมูล คือ • ตัวแปร a เก็บคา 300 • แปลงเลข 300 เปนเลขฐานสอง จะได 100101100 (9 บิต) • ชนิดขอมูล byte มีขนาด 8 บิต •
b = (byte)a;
เมื่อแปลงขอมูล a ไปเปนชนิด byte จะได 00101100 (8 บิต) นั่นคือ 44 ในเลขฐานสิบนั่นเอง การแปลงชนิดขอมูลที่ไมมีการสูญเสียขอมูล ชนิดขอมูลที่ ถูกแปลง (from type) byte short char int long float
ชนิดขอมูลที่ ตองการแปลง (to type) short, char, int, long, float, double int, long, float , double int, long, float , double long, float , double float , double double
ตัวแปรคาคงที่ (Constant Variable) ตัวแปรที่เปนคาคงที่ เปนตัวแปรที่กําหนดคาแลว ไมสามารถเปลี่ยนแปลงได ทําไดโดยใชคียเวิรด final ระบุที่หนาชนิดตัวแปรที่ตองการ final dataType VAR_NAME = คาที่กําหนด; ตัวอยาง Class EmployInfo{ final static String DEPARTMENT = “Computer”; } EmployInfo.department = “Finance”; //compile error คาคงที่สามารถกําหนดคาไดเพียงครั้งเดียว ไมสามารถเปลี่ยนแปลงคาได ***คียเวิรด final ระบุที่หนาชนิดของเมธอดและคลาสไดดวย •
final variable คือ การกําหนดคาคงที่
•
final method ไมสามารถมีเมธอดแบบ overridden ได
•
final class ทําใหคลาสอื่นไมสามารถสืบทอดคุณสมบัติจากคลาสนี้ได
2.4 ขอบเขตตัวแปร
ภาษาจาวาแบงขอบเขตตัวแปรเปน 2 ชนิด คือ • ตัวแปรภายใน เรียกใชงานไดเฉพาะภายในเมธอด • ตัวแปรออบเจกต เปนคุณลักษณะของคลาส
[email protected]
6/25
บทที่ 2
Modern Programming Languages
ตัวแปรภายใน (Local Variables) Local variable คือตัวแปรหรือคาคงที่ ที่อยูภายในบล็อกของเมธอด ซึ่งจะมีขอบเขตการใชงานอยูใน บล็อกเทานั้น 1.
class LocalDemo { public void methodA() { int myLocal; //ตัวแปรภายใน //more code } }
ตัวแปรของออบเจคต (Instance Variables) Instance variable คือ ตัวแปรหรือคาคงที่ ที่ประกาศภายในบล็อกของคลาสซึ่งอยูภายนอกเมธอดของ คลาส ตัวแปรของออบเจกตนั้นจะมีขอบเขตการใชงานอยูภายในคลาสโดยที่ทุกๆเมธอดในคลาสสามารถ เรียกใชได
2.
class InstanceVarDemo { long instanceVariable; //ตัวแปรของออบเจคต public static void main(String args[]) { int local;
//ตัวแปรภายใน
// more code } }
ตัวอยาง class VariableDemo { int myInt; //ตัวแปรของออบเจคต void methodOne() { int myLocal1; //ตัวแปรภายใน } void methodTwo() { int myLocal2; //ตัวแปรภายใน System.out.println(myInt); System.out.println(myLocal1); ในเมธอด methodTwo() ไมรูจักตัวแปร myLocall } }
สําหรับตัวแปรนี้เมื่อทําการสรางออบเจกตดวยคียเวิรด new จะถูกกําหนดคาเริ่มตนใหโดยอัตโนมัติดังนี้
[email protected]
ชนิดขอมูล
คาเริ่มตน
byte short int long float
0 0 0 0 0.0
7/25
บทที่ 2
Modern Programming Languages
ชนิดขอมูล
คาเริ่มตน
double char boolean
0.0 ‘\u0000’ false null
คลาส ตัวอยาง
ผลลัพธที่ได
การกําหนดตัวแปรออบเจกตเปนแบบสแตติก (Static Variables) • StaticVariables คือตัวแปรของออบเจกตที่เปนแบบ static สามารถถูกเรียกใชจากชื่อของ คลาสไดโดยไมจําเปนตองสรางออบเจกต เนื่องจากหากทําการคอมไพลตัวแปรที่ถูกกําหนด เปนแบบ static จะถูกจองพื้นที่ไวแลวสามารถเรียกใชงานไดโดยไมตองสรางออบเจกต • สรางไดโดยใชคียเวิรด static นําหนาตัวแปรออบเจกต
[email protected]
8/25
บทที่ 2
Modern Programming Languages class ClassVariableDemo { static int myClassVar; }
เรียกใชไดดังนี้
ClassVariableDemo.myClassVar
ตัวอยาง Class EmployInfo{ static String department = “Computer”; String name = “Phanlapha”; } จากตัวอยางคลาส EmployInfo จะเห็นวา •
department เปน class variable เรียกใชงานไดโดยเรียกชื่อคลาส System.out.println(EmployInfo.department);
•
name เปน ตัวแปรของออบเจกต ซึ่งจะตองสรางออบเจกตกอนจึงจะเรียกใชงานได System.out.println(EmployInfo.name); EmployInfo employee = new EmployInfo(); System.out.println(employee.name);
ในการสรางออบเจกตของคลาส ทุกๆ ออบเจกตจะมีตําแหนงตัวแปรออบเจกตเปนของตัวเอง ใน กรณีที่ตองการใชตัวแปรรวมกันตองทําอยางไร เชน บริษัทตองการนับจํานวนพนักงานบริษัทที่มีอยู เมื่อมี พนักงานใหมเขามา ใหทําการนับจํานวนเพิ่มขึ้น ตัวอยาง
[email protected]
9/25
บทที่ 2
Modern Programming Languages
ผลลัพธที่ได
จากผลลัพธที่ไดจะเห็นวาตัวแปรออบเจกต numOfEmployee เปนแบบ static มีพื้นที่อางอิงใน ตําแหนงเดียวกัน การเรียกใชงานดวยออบเจกต e1,e2 และ e3 จะถูกนําไปเก็บในตําแหนงเดียวกัน หากตัวแปรออบเจกต numOfEmployee ไมเปนแบบ static ผลลัพธที่ไดจะเปนอยางไร
***คียเวิรด static ยังสามารถใชในการกําหนดเมธอดไดดวย เรียก Static Methods •
static method คือเมธอดที่สามารถถูกเรียกใชจากชื่อของคลาสไดโดยไมจําเปนตองสรางออบเจกต
•
โดยปกติจะประกาศเมธอดใดๆ เปนแบบ static ในกรณีที่เมธอดนั้นเปนเมธอดที่ใชงานทั่วไป เชน
•
Integer.parseInt(“4”); เมธอดแบบ static จะไมสามารถมีเมธอดแบบ overridden ได
ตัวอยาง
ผลลัพธที่ได
[email protected]
10/25
บทที่ 2
Modern Programming Languages
3.
การสงผานคาตัวแปร (parameter) การสงผานตัวแปรในภาษาจาวา แบงออกเปน 2 แบบ คือ - การสงผานตัวแปรดวยชนิดขอมูลพื้นฐาน (pass by value) การสงพารามิเตอรแบบนี้ผานเขาไปในเมธอด เปนเพียงการสงคาเขาไปใชงานในเมธอดเทานั้น หากมีการเปลี่ยนแปลงคาพารามิเตอรภายในเมธอดที่ถูกเรียกใชงาน จะไมมีผลทําใหคาของ พารามิเตอรที่สงเขาไป มีคาเปลี่ยนแปลงไปดวย - การสงผานตัวแปรดวยชนิดขอมูลอางอิง (pass by reference) การสงพารามิเตอรแบบนี้ เปนการสงตําแหนงอางอิงของออบเจกต ดังนั้นการเปลี่ยนแปลงคา ของตัวแปรออบเจกต จะมีผลทําใหตัวแปรของออบเจกตที่สงเขาไปเปลี่ยนแปลงคาไปดวย
ตัวอยาง
ผลลัพธที่ได
[email protected]
11/25
บทที่ 2
Modern Programming Languages
จากตัวอยางขางตน มาทําความเขาใจ โดยดูจากผลลัพธที่ไดดังนี้ 1. การสงผานตัวแปรชนิดขอมูลพื้นฐาน จากโปรแกรมมีการกําหนดตัวแปร myInt มีคา 10 เมื่อมีสงตัวแปร myInt เขาไปยังเมธอด passValue ซึ่งในเมธอดดังกลาวมีการเปลี่ยนแปลงคาที่สงเขาไปเปน 0 แตคาของตัวแปร myInt หลังจากการเรียกใชเมธอดดังกลาว ไมมีการเปลี่ยนแปลง สังเกตไดจากคา myInt ที่แสดงผลออกมาไมมี การเปลี่ยนแปลง ตัวอยางการเรียกใชจากโปรแกรมขางตน int myInt = 10; // ประกาศตัวแปร param.passValue(myInt); //การเรียกใชเมธอดโดยการสงคาเขา 2. การสงผานตัวแปรชนิดขอมูลอางอิง จากโปรแกรมมีการสรางออบเจกต p โดยจากการสรางออบเจกตคาเริ่มตนของพิกัด (x,y) มีคาเปน (0,0) เมื่อมีสงออบเจกต p เขาไปยังเมธอด passPoint ซึ่งในเมธอดดังกลาวมีการเปลี่ยนแปลงคาพิกัด (x,y) ของออบเจกต p คือ p.x=1, p.y=1 โดยหลังจากเรียกใชเมธอดดังกลาว คาพิกัด (x,y) มีการ เปลี่ยนแปลงไปเปน (1,1) ตัวอยางการเรียกใชจากโปรแกรมขางตน Point p = new Point; //สรางออบเจกต param.passPoint(p); // //การเรียกใชเมธอดโดยการสงคาเขาเปนออบเจกต 3. การสงผานตัวแปรชนิด String จากที่รูมาตัวแปรชนิด String เปนตัวแปรอางอิงหรือออบเจกต แตการสงผานคาตัวแปรเขาไปใน เมธอด ผลที่ไ ด คา ที่สงเขา ไปไมเกิดการเปลี่ยนแปลง คือตัวแปร str ที่แสดงผลออกมาไมมีก าร เปลี่ยนแปลง จากตัวอยางนี้ในภาษาจาวา การสงผานพารามิเตอรสตริงเปนการสงผานตัวแปรแบบชนิด ขอมูลพื้นฐาน ตัวอยางการเรียกใชจากโปรแกรมขางตน String str = “Hello”; //สรางตัวแปรชนิดสตริง param.passString(str); // //การเรียกใชเมธอดโดยการสงคาเขาเปนสตริง *** คลาส Point ใชเพื่อกําหนดพิกัด x และ y อยูในแพ็คเกจ java.awt ดังนั้นจะตอง import java.awt.Point; เพื่อเรียกใชงาน*** Class Point Field Summary int x
The x coordinate.
int y
The y coordinate.
Constructor Summary Point() Constructs and initializes a point at the origin (0,0) of the coordinate space. Point(int x, int y) Constructs and initializes a point at the specified(x, y) location in the coordinate space. Point(Point p) Constructs and initializes a point with the same location as the specified Point object.
[email protected]
12/25
บทที่ 2
Modern Programming Languages
2.5 ตัวดําเนินการ
ตัวดําเนินการในภาษาจาวา แบงเปน 4 ประเภท ดังนี้ • ตัวดําเนินการทางคณิตศาสตร (Arithmetic operators) • ตัวดําเนินการแบบสัมพันธ (Relational operators) • ตัวดําเนินการทางตรรกศาสตร (Logical operators) • ตัวดําเนินการระดับบิต (Bitwise operators) ตัวดําเนินการทางคณิตศาสตร (Arithmetic operators) เครื่องหมาย + * / %
ความหมาย บวก ลบ คูณ หาร เศษจากการหาร
ตัวอยาง a+b a-b a*b a/b a%b (Modulus)
ตัวดําเนินการทางคณิตศาสตรแบบยอ เครื่องหมาย
ตัวอยาง
ความหมาย
+= -= *= /= %=
a+=7 a-=7 a*=7 a/=7 a%=7
a=a+7 a=a-7 a=a*7 a=a/7 a=a%7
ลําดับความสําคัญในการคํานวณคาของนิพจน 1. ทําในเครื่องหมายวงเล็บกอน 2. เครื่องหมายลบหนาตัวเลข ที่เปน unary operator เชน -7 3. *, /, % ลําดับความสําคัญเทากัน การคํานวณเรียงนิพจนจากซายไปขวา 4. +, - ลําดับความสําคัญเทากัน การคํานวณเรียงนิพจนจากซายไปขวา ตัวอยาง
ผลลัพธที่ได
7
[email protected]
13/25
บทที่ 2
Modern Programming Languages
ลําดับขั้นตอนการคํานวณ 2 – 3 + (-7 + (9 % 2 / 2) + 33) / 3 + 2 % 2 1 2
o o
ขั้นตอนที่ 1 9 % 2 = 1 ขั้นตอนที่ 2 ผลลัพธจากขั้นตอนที่ 1 คือ 1 ไปทําการหารกับ 2 Æ 1/2= 0 จะเหลือนิพจน 2 – 3 + (-7 + 0 + 33) / 3 + 2 % 2 3 4
o o
ขั้นตอนที่ 3 ทําในวงเล็บจากนิพจนที่ไดในขั้นตอนที่ 2 -7 + 0 + 33 = 26 ขั้นตอนที่ 4 ผลลัพธจากขั้นตอนที่ 3 คือ 26 ไปทําการหารกับ 3 Æ 26/3= 8 จะเหลือนิพจน 2 – 3 + 8 + 2 % 2 5
o
ขั้นตอนที่ 5 2 % 2 = 0 จะเหลือนิพจน 2 – 3 + 8 + 0
o
ขั้นตอนที่ 6 ทําการคํานวณเรียงจากซายไปขวา ไดผลลัพธเทากับ 7
6
ตัวดําเนินการแบบสัมพันธ (Relational operators) เครื่องหมาย > >= < <= == !=
ความหมาย มากกวา มากกวาหรือเทากับ นอยกวา นอยกวาหรือเทากับ เทากับ ไมเทากับ
ตัวอยาง a>b a>=b a
ตัวดําเนินการทางตรรกศาสตร (Logical operators)
•
เครื่องหมาย
ตัวอยาง
&& || !
a && b (conditional) a || b (conditional) !a
เครื่องหมาย && และ || เรียกวา ตัวดําเนินการทางตรรกศาสตรแบบ “short-circuit” (ตรวจสอบ เงื่อนไข) if(i > 0 && i < 9) System.out.println(“Data is between 0-9”); จากเงื่อนไขนี้ตัวแปร i ที่คาตั้งแต 1 ถึง 8 จะแสดงผล Data is between 0-9
[email protected]
14/25
บทที่ 2
Modern Programming Languages if(i <= 0 || i >= 9) System.out.println(“error”); จากเงื่อนไขนี้ตัวแปร i ที่มีคานอยกวาเทากับ 0 หรือมีคามากกวาเทากับ 9 จะแสดงผล error
ตัวดําเนินการระดับบิต (Bitwise operators) เครื่องหมาย >> << >>> & | ^ ~
ความหมาย Shift บิตไปทางขวา Shift บิตไปทางซาย Shift บิตไปทางขวา ไมคิดเครื่องหมาย
ตัวอยาง
and or xor complement
a&b a|b a^b ~a
a>>b a<
>>b
ตัวอยาง
ผลลัพธที่ได
พิจารณาการทํางานในแตละบรรทัด บรรทัดที่ 3 7>>2 คือการเลื่อนบิตไปทางขวา 2 บิต สวนบิตที่วางทางซายมือใส 0 ลงไป 7 Æ 0000 0000 0000 0000 0000 0000 0000 0111 0000 0000 0000 0000 0000 0000 0000 0001 Æ 1
[email protected]
15/25
บทที่ 2
Modern Programming Languages
บรรทัดที่ 4 7<<2 คือการเลื่อนบิตไปทางซาย 2 บิต สวนบิตที่วางทางขวามือใส 0 ลงไป 0000 0000 0000 0000 0000 0000 0000 0111 Å 7 28 Å 0000 0000 0000 0000 0000 0000 0001 1100
บรรทัดที่ 5 -1>>>1 คือการเลื่อนบิตไปทางซาย 2 บิต สวนบิตที่วางทางขวามือใส 0 ลงไป -1 Æ 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 Æ 2147483647
บรรทัดที่ 6
5&1 คือ AND ระดับบิต
5 Æ 0000 0000 0000 0000 0000 0000 0000 0101 AND 1 Æ 0000 0000 0000 0000 0000 0000 0000 0001 0000 0000 0000 0000 0000 0000 0000 0001 Æ 1
บรรทัดที่ 7
6|1
คือ OR ระดับบิต
6 Æ 0000 0000 0000 0000 0000 0000 0000 0110 OR 1 Æ 0000 0000 0000 0000 0000 0000 0000 0001 0000 0000 0000 0000 0000 0000 0000 0111 Æ 7
บรรทัดที่ 8 1^6 คือ XOR ระดับบิต 1 Æ 0000 0000 0000 0000 0000 0000 0000 0001 XOR 6 Æ 0000 0000 0000 0000 0000 0000 0000 0110 0000 0000 0000 0000 0000 0000 0000 0111 Æ 7
บรรทัดที่ 9
~7 สลับคาระหวาง 0 และ 1
7 Æ 0000 0000 0000 0000 0000 0000 0000 0111 1111 1111 1111 1111 1111 1111 1111 1000 Æ -8 2.6 คําสั่งในการตัดสินใจและการวนรอบ
คําสั่งในการตัดสินใจ @ if-else คําสั่งควบคุมการทํางานโดยพิจารณาจากเงื่อนไข รูปแบบ if (logical expression1) statement1; else if (logical expression2) { statement2; statement3; } else statement4;
[email protected]
16/25
บทที่ 2
Modern Programming Languages @
@
@
จากรูปแบบขางตน หากตรวจสอบเงื่อนไข (logical expression1) แลวปรากฏวาเงื่อนไขเปน จริง โปรแกรมจะทําการประมวลผลคําสั่งใน statement1 สําหรับกรณีที่หลังเงื่อนไขมีเพียง คําสั่งเดียว ไมจําเปนตองใส { } แตหากตรวจสอบเงื่อนไข (logical expression1) เปนเท็จ จะทําการตรวจสอบเงื่อนไขใน (logical expression2) ถาเงื่อนไขเปนจริง โปรแกรมจะทําการประมวลผลคําสั่งที่อยูภายใน บล็อก ที่ประกอบดวย statement2 และ statement3 หากไมตรงกับเงื่อนไขทั้งสอง จะไปทําคําสั่ง statement4 ทันที
ตัวอยาง
ผลลัพธที่ได
เปนคําสั่งที่ใชในการตรวจสอบเงื่อนไขไดหลายกรณี โดย value ในแตละ case ตอง เปนคาคงที่และมีชนิดขอมูลดังนี้ char, byte, short หรือ int รูปแบบ
@ switch
switch(varName) { case value1: statement1; break; case value2: statement2; statement3; break; default: statement4; }
[email protected]
17/25
บทที่ 2
Modern Programming Languages @
@
จากรูปแบบขางตน หากตรวจสอบเงื่อนไข (varName) แลวปรากฏวา varName มีคาตรงกับ value1 โปรแกรมจะทําการประมวลผลคําสั่งใน statement1 เพื่อไมใหโปรแกรมเขาทํางานใน case ถัดไปหรือ case อื่นๆ จะตองมีการระบุคําสั่ง break ซึ่งจะทําใหโปรแกรมออกจากการ ทํางานในเงื่อนไขของ switch หากตรวจสอบเงื่อนไข (varName) แลวปรากฏวา varName มีคาตรงกับ value2 โปรแกรม จะทําการประมวลผลคําสั่งใน statement2 และ statement3 ซึ่งอยูภายใต case ที่ varName=value2
@
ในกรณีตรวจสอบแลวไมตรงกับ case ใดเลย โปรแกรมจะเขาทํางานในสวนของ default คือ statement4
ตัวอยาง
ผลลัพธที่ได
คําสั่งในการวนรอบ @ for โปรแกรมจะทําการวนรอบจนกวา condition expr จะเปน false รูปแบบ for(initial; condition expr; update) statement;
@
@ @ @
จากรูปแบบขางตน การทํางานแบงเปน 3 สวนคือ สวนกําหนดคาเริ่มตนของตัวแปร (initial), สวนที่เปนเงื่อนไข (condition expr) และสวนของการปรับเปลี่ยนคาของตัวแปร โดยทั้ง 3 สวนแยกออกจากกันดวยเครื่องหมาย ; สวนเริ่มตน เปนการประกาศและกําหนดคาเริ่มตนของตัวแปรที่ใชเปนตัวตรวจสอบเงื่อนไข สวนที่สอง เปนนิพจนที่ใชตรวจสอบเงื่อนไข หากผลการตรวจสอบเปนเท็จ ก็จะจบการทํางาน และออกจากลูป หากเปนจริงจะทํางานที่คําสั่ง statement แลววนรอบตรวจสอบเงื่อนไขตอไป สวนที่สาม เปนสวนที่เพิ่มหรือลดคาของตัวแปร
[email protected]
18/25
บทที่ 2
Modern Programming Languages
ตัวอยาง
ผลลัพธที่ได
@
while การวนรอบจะหยุดการทํางานเมื่อเงื่อนไขเปนเท็จ
รูปแบบ while(logical expression) statement; @
จากรูปแบบขางตน โปรแกรมจะตรวจสอบเงื่อนไขกอน (logical condition) เมื่อเปนจริงจะ เขาไปทํา statement ที่อยูภายในบล็อกของ while หากเปนเท็จจะสิ้นสุดการทํางานในลูป while
ตัวอยาง
ผลลัพธที่ได โปรแกรมจะทําการสุมคาตัวเลขจํานวนเต็ม เมื่อคาที่สุมไดมากกวา 5 โปรแกรมจะหยุดการ ทํางาน @
do-while การวนรอบจะหยุดการทํางานเมื่อเงื่อนไขเปนเท็จ
รูปแบบ do { statement; } while(logical expression);
[email protected]
19/25
บทที่ 2
Modern Programming Languages @
จากรูปแบบขางตน โปรแกรมจะเขาไปทํา statement ที่อยูภายในบล็อกของ do-while กอน จากนั้นจะตรวจสอบเงื่อนไข (logical condition) เมื่อเปนจริงจะวนไปทํา statement ที่อยู ภายในบล็อกของ do-while หากเปนเท็จจะสิ้นสุดการทํางานในลูป do-while
ตัวอยาง
ผลลัพธที่ได โปรแกรมจะทําการสุมคาตัวเลขจํานวนเต็ม เมื่อคาที่สุมไดมากกวา 5 โปรแกรมจะหยุดการ ทํางาน
[email protected]
20/25
บทที่ 2
Modern Programming Languages
แบบฝกหัด 1. จากโปรแกรม MyNumber.java ใหนักศึกษาลองคิดวาเมื่อรันโปรแกรมแลวผลลัพธที่ไดเปนอยางไร
นักศึกษาจะไดประโยชนสูงสุดหากคิดผลลัพธเอง แลวสรางโปรแกรมนี้เพื่อตรวจคําตอบ public class MyNumber{ static int staticNum; int number; public MyNumber() { staticNum++; } int increaseNumber(){ return number++; } int decreaseNumber(){ return --number; } public static void main(String args[]){ MyNumber n1 = new MyNumber(); System.out.println("Object n1"); System.out.println("Number : "+n1.number); System.out.println("Call method int increaseNumber()"); System.out.println("return value : "+n1.increaseNumber()); System.out.println("After Call method int increaseNumber()"); System.out.println("Number : "+n1.number); System.out.println("Static Number(staticNum): "+n1.staticNum); System.out.println("****************************************"); MyNumber n2 = new MyNumber(); System.out.println("Object n2"); System.out.println("Number : "+n2.number); System.out.println("Call method int decreaseNumber()"); System.out.println("return value : "+n2.decreaseNumber()); System.out.println("After Call method int countNumber()"); System.out.println("Number : "+n2.number); System.out.println("Static Number(staticNum): "+n2.staticNum); } }
ผลที่ได : _____________________________________________________________ _____________________________________________________________ _____________________________________________________________ _____________________________________________________________ _____________________________________________________________ _____________________________________________________________ _____________________________________________________________ _____________________________________________________________ [email protected]
21/25
บทที่ 2
Modern Programming Languages
2. จากโปรแกรม Student.java เปนการสรางคลาสตนแบบใหเรียกใชงานดังนี้ public class Student{ private String id,name; private double gpa; void setID(String i) { id = i; } void setName(String n) { name = n; } void setGPA(double g) { gpa = g; } String getID() { return id; } String getName() { return name; } double getGPA() { return gpa; } void show(){ System.out.println("ID : "+id); System.out.println("Name : "+name); System.out.println("GPA : "+gpa); } }
ใหนักศึกษาสรางโปรแกรม CreateStudent.java เพื่อทําการเรียกใชคลาส Student ใหไดผลลัพธดังนี้
public class CreateStudent { public static void main(String args[]) {
} }
[email protected]
22/25
บทที่ 2
Modern Programming Languages
3. สรางโปรแกรม MaxVariables.java • เพื่อหาคาสูงสุดของขอมูลตัวเลขทั้งจํานวนเต็มและจํานวนจริง โดยเปดจาวา documents วาคลาสของ Byte, Short, Integer, Long, Float และ Double มีเมธอดหรือคาคงที่ใหเรียกใชเพื่อดูคาสูงสุดได
หรือไม • ในสวนของ character ใหหาเมธอด (คลาสของ Character)ในการเช็ควาเปนตัวพิมพเล็กหรือตัวพิมพ ใหญ public class MaxVariables { public static void main(String args[]) { // หใามใสคาตัวเลข ตองเรียกใชเมธอดหรือตัวแปรจากคลาสที่บอกไปขางตน byte largestByte = ________________; short largestShort = ________________; int largestInteger = ________________; long largestLong = ________________; // real numbers float largestFloat = ________________; double largestDouble = ________________; // other primitive types char aChar = 'S'; boolean aBoolean = true; // display them all System.out.println("The largest byte value is " + largestByte); System.out.println("The largest short value is " + largestShort); System.out.println("The largest integer value is " + largestInteger); System.out.println("The largest long value is " + largestLong); System.out.println("The largest float value is " + largestFloat); System.out.println("The largest double value is " + largestDouble); //เติมเงื่อนไขในการตรวจสอบตัวแปร aChar วาเปนตัวพิมพเล็กหรือตัวพิมพใหญ if ( ____________________ ) { System.out.println("The character " + aChar + " is upper case."); } else { System.out.println("The character " + aChar + " is lower case."); } System.out.println("The value of aBoolean is " + aBoolean); } }
ผลที่ได : _____________________________________________________________ _____________________________________________________________ _____________________________________________________________ _____________________________________________________________ _____________________________________________________________ _____________________________________________________________ _____________________________________________________________ _____________________________________________________________
[email protected]
23/25
บทที่ 2
Modern Programming Languages
4. สรางโปรแกรม Circle.java เพื่อคํานวณหาพื้นที่วงกลม โดยคาคงที่ของคา π หาไดจากคลาส Math 4.1. จงทําโปรแกรมขางลาง ใหเปนผลสําเร็จ public class Circle { double radius; public double area() { return ______________________; //คํานวณหาพื้นที่ } public void print() { System.out.println("radius = " + __________); System.out.println("area = " + ___________); } public static void main(String[] args) { Circle c1 = new Circle(); c1.radius = _______________; //รับคาจาก command line arguments __________________;//แสดงรัศมีและพื้นที่ } }
เชน คารัศมี มีคา 2 ผลที่ได :
4.2. จากโปรแกรม Circle.java ใหเพิ่มเมธอดในการหาเสนรอบวง และปริมาตรของวงกลม โดยมีเมนูให
เลือกดังนี้
-
เลือก 0 : ออกจากโปรแกรม เลือก 1 : หาเสนรอบวง เลือก 2 : หาพื้นที่ เลือก 3 : หาปริมาตร เมื่อทําการคํานวณเมธอดใดๆเสร็จใหรอรับคาจากเมนู จนกวาจะเลือก 0 เทานั้นจึงจะออกจาก โปรแกรม โดยหาก เลือกเมนู นอกเหนือจากเมนูนี้ใหแจง error เพื่อรอรับเมนูที่ถูกตอง การรับคารัศมี ใหรับจาก keyboard กําหนดให ตัวแปรออบเจกต radius เปนแบบ private private double radius;
จะทําอยางไรใหสามารถรับคารัศมีไปเก็บและทําการแสดงรัศมีและพื้นที่ได การรับคาเขาจาก keyboard มีคลาส Console ใหเรียกใช public static String readString() Æ รับคาเขาเปน String public static byte readByte() Æ รับคาเขาเปน byte public static short readShort() Æ รับคาเขาเปน short public static int readInt() Æ รับคาเขาเปน int public static long readLong() Æ รับคาเขาเปน long public static float readFloat() Æ รับคาเขาเปน float [email protected]
24/25
บทที่ 2
Modern Programming Languages public static double readDouble() Æ รับคาเขาเปน double public static char readChar() Æ รับคาเขาเปน char
copy file Console.java ไดที่ http://berry.cpe.mut.ac.th/java/Subject.html 5. สรางโปรแกรม MultiplicationTable.java เพื่อแสดงแมสูตรคูณแม 1-12 ใหไดดังรูปดานลาง
ผลที่ได :
6. สรางโปรแกรม CarParkFee.java เพื่อใชคํานวณคาจอดรถ รอรับคาเขาเปนนาที แลวทําการคํานวณคา
จอดรถ โดยกด -1 จบการทํางานของโปรแกรม ถาไมใช -1 ใหวนรับคาเขาเรื่อยๆ เพื่อทําการคํานวณ ซึ่งมี รายละเอียดคาจอดรถดังนี้ • จอดรถไมเกิน 15 นาที จอดฟรี • 3 ชม. แรก ชั่วโมงละ 10 บาท • ชั่วโมงที่ 4 ขึ้นไป ชั่วโมงละ 20 บาท • จอดมากกวา 8 ชม. คิดอัตราเหมาจาย 200 บาท
[email protected]
25/25