You are on page 1of 25

บทที่ 2 Modern Programming Languages

คอมเมนต การตั้งชื่อ ชนิดของขอมูล ตัวดําเนินการ


คําสั่งในการตัดสินใจและการวนรอบ

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

phanlapha@yahoo.com 1/25
บทที่ 2 Modern Programming Languages

วิธีการสรางเอกสารการใชโปรแกรมจากตัวอยาง Employee.java

1. ทําการสรางไฟลจาวา โดยคอมเมนตขอความที่ตองการสรางเปนเอกสาร โดยพิมพตัวอยางตาม


โปรแกรม Employee.java ดังรูปดานบน
2. เรียกใชโปรแกรม javadoc.exe ที่ดอส ดังนี้
a. พิมพคําสั่ง javadoc Employee.java
b. จะไดไฟล Employee.html ที่แสดงรายละเอียดการใชออบเจกต Employee
3. ทําการพิจารณาที่เอกสารการใชโปรแกรมที่ได สังเกตุไดวาขอความที่อยูในคอมเมนตที่เปนรูปแบบ
การสรางเอกสารจะไปปรากฏแสดงเปนรายละเอียดในไฟล Employee.html โดยจะมีตารางสรุป
รายละเอียดของตัวแปรออบเจกตและเมธอดของออบเจกต Employee

4. ในรายละเอียดของเมธอด incSalary ดังรูปดานลาง มีการสงคากลับ ใหสังเกตที่คอมเมนต จะตองมี


@return นําหนาขอความที่ตองการแสดงในกรอบวงรี

phanlapha@yahoo.com 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)

phanlapha@yahoo.com 3/25
บทที่ 2 Modern Programming Languages

ชนิดขอมูลแบบพื้นฐาน (primitive types)


• ขอมูลตัวเลขจํานวนเต็ม (integer)

ชนิด ขนาด ชวงของขอมูล


(type) (bytes) (valid range)
byte 1 -128 to 127
short 2 -32768 to 32767
int 4 -2147483648 to 2147483647
long 8 About -9.223*1018 to 9.223*1018

• ขอมูลตัวเลขจํานวนจริงหรือเลขทศนิยม (real number)

ชนิด ขนาด ชวงของขอมูล


(type) (bytes) (valid range)
float 4 ~ -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) (bytes) (valid range)
char 2 0-65535 ( /u0000 - /uFFFF )

o ขอมูลอักขระแบบ unicode
o ขอมูลคาคงที่จะอยูในเครื่องหมาย ‘ (single quote) เชน ‘a’
o สามารถใชเครื่องหมาย \ ไวขางหนา เชน \r, \n, \t, \b, \’, \”, \\
• ขอมูลตรรกะ (logical)

ชนิด ขนาด ชวงของขอมูล


(type) (bytes) (valid range)
boolean 1 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

phanlapha@yahoo.com 4/25
บทที่ 2 Modern Programming Languages

ชนิดขอมูลแบบอางอิง (reference types)


• สตริง, อะเรย, คลาส, และอินเตอรเฟซ เปนขอมูลแบบอางอิง
• จะตองใช new เพื่อจองหนวยความจําและกําหนดคาเริ่มตน
• สตริง (String) เปนคลาสที่กําหนดไวในภาษาจาวา
• ตัวแปรที่เปนสตริง ก็คือ object ชนิดหนึ่ง

การแปลงชนิดขอมูล (Casting)
การแปลงชนิดขอมูล คือ การแปลงขอมูลชนิดหนึ่ง ไปเปนขอมูลอีกชนิดหนึ่ง เพื่อใหชนิดขอมูลสองชนิด
มีความสอดคลองกัน เชน

ผลลัพธที่ได

ขอควรระวังในการแปลงขอมูล!!!
ในการแปลงชนิดขอมูลที่มีขนาดใหญกวา ไปเปนชนิดขอมูลที่มีขนาดเล็กกวา อาจมีผลทําใหสูญเสีย
ขอมูลบางสวนได เชน

ผลลัพธที่ได

phanlapha@yahoo.com 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) (to type)
byte short, char, int, long, float, double
short int, long, float , double
char int, long, float , double
int long, float , double
long float , double
float 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 ชนิด คือ
• ตัวแปรภายใน เรียกใชงานไดเฉพาะภายในเมธอด
• ตัวแปรออบเจกต เปนคุณลักษณะของคลาส

phanlapha@yahoo.com 6/25
บทที่ 2 Modern Programming Languages

1. ตัวแปรภายใน (Local Variables)


Local variable คือตัวแปรหรือคาคงที่ ที่อยูภายในบล็อกของเมธอด ซึ่งจะมีขอบเขตการใชงานอยูใน
บล็อกเทานั้น

class LocalDemo {
public void methodA() {
int myLocal; //ตัวแปรภายใน
//more code
}
}

2. ตัวแปรของออบเจคต (Instance Variables)


Instance variable คือ ตัวแปรหรือคาคงที่ ที่ประกาศภายในบล็อกของคลาสซึ่งอยูภายนอกเมธอดของ
คลาส ตัวแปรของออบเจกตนั้นจะมีขอบเขตการใชงานอยูภายในคลาสโดยที่ทุกๆเมธอดในคลาสสามารถ
เรียกใชได
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 จะถูกกําหนดคาเริ่มตนใหโดยอัตโนมัติดังนี้

ชนิดขอมูล คาเริ่มตน
byte 0
short 0
int 0
long 0
float 0.0

phanlapha@yahoo.com 7/25
บทที่ 2 Modern Programming Languages

ชนิดขอมูล คาเริ่มตน
double 0.0
char ‘\u0000’
boolean false
คลาส null

ตัวอยาง

ผลลัพธที่ได

การกําหนดตัวแปรออบเจกตเปนแบบสแตติก (Static Variables)


• StaticVariables คือตัวแปรของออบเจกตที่เปนแบบ static สามารถถูกเรียกใชจากชื่อของ
คลาสไดโดยไมจําเปนตองสรางออบเจกต เนื่องจากหากทําการคอมไพลตัวแปรที่ถูกกําหนด
เปนแบบ static จะถูกจองพื้นที่ไวแลวสามารถเรียกใชงานไดโดยไมตองสรางออบเจกต
• สรางไดโดยใชคียเวิรด static นําหนาตัวแปรออบเจกต

phanlapha@yahoo.com 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);

ในการสรางออบเจกตของคลาส ทุกๆ ออบเจกตจะมีตําแหนงตัวแปรออบเจกตเปนของตัวเอง ใน


กรณีที่ตองการใชตัวแปรรวมกันตองทําอยางไร เชน บริษัทตองการนับจํานวนพนักงานบริษัทที่มีอยู เมื่อมี
พนักงานใหมเขามา ใหทําการนับจํานวนเพิ่มขึ้น

ตัวอยาง

phanlapha@yahoo.com 9/25
บทที่ 2 Modern Programming Languages

ผลลัพธที่ได

จากผลลัพธที่ไดจะเห็นวาตัวแปรออบเจกต numOfEmployee เปนแบบ static มีพื้นที่อางอิงใน


ตําแหนงเดียวกัน การเรียกใชงานดวยออบเจกต e1,e2 และ e3 จะถูกนําไปเก็บในตําแหนงเดียวกัน
หากตัวแปรออบเจกต numOfEmployee ไมเปนแบบ static ผลลัพธที่ไดจะเปนอยางไร

***คียเวิรด static ยังสามารถใชในการกําหนดเมธอดไดดวย เรียก Static Methods


• static method คือเมธอดที่สามารถถูกเรียกใชจากชื่อของคลาสไดโดยไมจําเปนตองสรางออบเจกต
• โดยปกติจะประกาศเมธอดใดๆ เปนแบบ static ในกรณีที่เมธอดนั้นเปนเมธอดที่ใชงานทั่วไป เชน
Integer.parseInt(“4”);
• เมธอดแบบ static จะไมสามารถมีเมธอดแบบ overridden ได

ตัวอยาง

ผลลัพธที่ได

phanlapha@yahoo.com 10/25
บทที่ 2 Modern Programming Languages

3. การสงผานคาตัวแปร (parameter)
การสงผานตัวแปรในภาษาจาวา แบงออกเปน 2 แบบ คือ
- การสงผานตัวแปรดวยชนิดขอมูลพื้นฐาน (pass by value)
การสงพารามิเตอรแบบนี้ผานเขาไปในเมธอด เปนเพียงการสงคาเขาไปใชงานในเมธอดเทานั้น
หากมีการเปลี่ยนแปลงคาพารามิเตอรภายในเมธอดที่ถูกเรียกใชงาน จะไมมีผลทําใหคาของ
พารามิเตอรที่สงเขาไป มีคาเปลี่ยนแปลงไปดวย
- การสงผานตัวแปรดวยชนิดขอมูลอางอิง (pass by reference)
การสงพารามิเตอรแบบนี้ เปนการสงตําแหนงอางอิงของออบเจกต ดังนั้นการเปลี่ยนแปลงคา
ของตัวแปรออบเจกต จะมีผลทําใหตัวแปรของออบเจกตที่สงเขาไปเปลี่ยนแปลงคาไปดวย

ตัวอยาง

ผลลัพธที่ได

phanlapha@yahoo.com 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.

phanlapha@yahoo.com 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=a+7
-= a-=7 a=a-7
*= a*=7 a=a*7
/= a/=7 a=a/7
%= a%=7 a=a%7

ลําดับความสําคัญในการคํานวณคาของนิพจน
1. ทําในเครื่องหมายวงเล็บกอน
2. เครื่องหมายลบหนาตัวเลข ที่เปน unary operator เชน -7
3. *, /, % ลําดับความสําคัญเทากัน การคํานวณเรียงนิพจนจากซายไปขวา
4. +, - ลําดับความสําคัญเทากัน การคํานวณเรียงนิพจนจากซายไปขวา

ตัวอยาง

ผลลัพธที่ได 7

phanlapha@yahoo.com 13/25
บทที่ 2 Modern Programming Languages

ลําดับขั้นตอนการคํานวณ
2 – 3 + (-7 + (9 % 2 / 2) + 33) / 3 + 2 % 2
1
2

o ขั้นตอนที่ 1 9 % 2 = 1
o ขั้นตอนที่ 2 ผลลัพธจากขั้นตอนที่ 1 คือ 1 ไปทําการหารกับ 2 Æ 1/2= 0
จะเหลือนิพจน 2 – 3 + (-7 + 0 + 33) / 3 + 2 % 2
3
4

o ขั้นตอนที่ 3 ทําในวงเล็บจากนิพจนที่ไดในขั้นตอนที่ 2 -7 + 0 + 33 = 26
o ขั้นตอนที่ 4 ผลลัพธจากขั้นตอนที่ 3 คือ 26 ไปทําการหารกับ 3 Æ 26/3= 8
จะเหลือนิพจน 2 – 3 + 8 + 2 % 2
5
o ขั้นตอนที่ 5 2 % 2 = 0 จะเหลือนิพจน 2 – 3 + 8 + 0
6
o ขั้นตอนที่ 6 ทําการคํานวณเรียงจากซายไปขวา ไดผลลัพธเทากับ 7

ตัวดําเนินการแบบสัมพันธ (Relational operators)

เครื่องหมาย ความหมาย ตัวอยาง


> มากกวา a>b
>= มากกวาหรือเทากับ a>=b
< นอยกวา a<b
<= นอยกวาหรือเทากับ a<=b
== เทากับ a= =b
!= ไมเทากับ a!=b

ตัวดําเนินการทางตรรกศาสตร (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

phanlapha@yahoo.com 14/25
บทที่ 2 Modern Programming Languages

if(i <= 0 || i >= 9)


System.out.println(“error”);
จากเงื่อนไขนี้ตัวแปร i ที่มีคานอยกวาเทากับ 0 หรือมีคามากกวาเทากับ 9 จะแสดงผล error

ตัวดําเนินการระดับบิต (Bitwise operators)

เครื่องหมาย ความหมาย ตัวอยาง


>> Shift บิตไปทางขวา a>>b
<< Shift บิตไปทางซาย a<<b
Shift บิตไปทางขวา
>>> a>>>b
ไมคิดเครื่องหมาย
& and a&b
| or a|b
^ xor a^b
~ complement ~a

ตัวอยาง

ผลลัพธที่ได

พิจารณาการทํางานในแตละบรรทัด
บรรทัดที่ 3 7>>2 คือการเลื่อนบิตไปทางขวา 2 บิต สวนบิตที่วางทางซายมือใส 0 ลงไป
7 Æ 0000 0000 0000 0000 0000 0000 0000 0111
0000 0000 0000 0000 0000 0000 0000 0001 Æ 1

phanlapha@yahoo.com 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;

phanlapha@yahoo.com 16/25
บทที่ 2 Modern Programming Languages

@ จากรูปแบบขางตน หากตรวจสอบเงื่อนไข (logical expression1) แลวปรากฏวาเงื่อนไขเปน


จริง โปรแกรมจะทําการประมวลผลคําสั่งใน statement1 สําหรับกรณีที่หลังเงื่อนไขมีเพียง
คําสั่งเดียว ไมจําเปนตองใส { }
@ แตหากตรวจสอบเงื่อนไข (logical expression1) เปนเท็จ จะทําการตรวจสอบเงื่อนไขใน
(logical expression2) ถาเงื่อนไขเปนจริง โปรแกรมจะทําการประมวลผลคําสั่งที่อยูภายใน
บล็อก ที่ประกอบดวย statement2 และ statement3
@ หากไมตรงกับเงื่อนไขทั้งสอง จะไปทําคําสั่ง statement4 ทันที

ตัวอยาง

ผลลัพธที่ได

@ switch เปนคําสั่งที่ใชในการตรวจสอบเงื่อนไขไดหลายกรณี โดย value ในแตละ case ตอง


เปนคาคงที่และมีชนิดขอมูลดังนี้ char, byte, short หรือ int
รูปแบบ
switch(varName) {
case value1: statement1;
break;
case value2: statement2;
statement3;
break;
default: statement4;
}

phanlapha@yahoo.com 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 แลววนรอบตรวจสอบเงื่อนไขตอไป
@ สวนที่สาม เปนสวนที่เพิ่มหรือลดคาของตัวแปร

phanlapha@yahoo.com 18/25
บทที่ 2 Modern Programming Languages

ตัวอยาง

ผลลัพธที่ได

@ while การวนรอบจะหยุดการทํางานเมื่อเงื่อนไขเปนเท็จ
รูปแบบ
while(logical expression)
statement;

@ จากรูปแบบขางตน โปรแกรมจะตรวจสอบเงื่อนไขกอน (logical condition) เมื่อเปนจริงจะ


เขาไปทํา statement ที่อยูภายในบล็อกของ while หากเปนเท็จจะสิ้นสุดการทํางานในลูป
while

ตัวอยาง

ผลลัพธที่ได โปรแกรมจะทําการสุมคาตัวเลขจํานวนเต็ม เมื่อคาที่สุมไดมากกวา 5 โปรแกรมจะหยุดการ


ทํางาน

@ do-while การวนรอบจะหยุดการทํางานเมื่อเงื่อนไขเปนเท็จ
รูปแบบ
do {
statement;
} while(logical expression);

phanlapha@yahoo.com 19/25
บทที่ 2 Modern Programming Languages

@ จากรูปแบบขางตน โปรแกรมจะเขาไปทํา statement ที่อยูภายในบล็อกของ do-while กอน


จากนั้นจะตรวจสอบเงื่อนไข (logical condition) เมื่อเปนจริงจะวนไปทํา statement ที่อยู
ภายในบล็อกของ do-while หากเปนเท็จจะสิ้นสุดการทํางานในลูป do-while

ตัวอยาง

ผลลัพธที่ได โปรแกรมจะทําการสุมคาตัวเลขจํานวนเต็ม เมื่อคาที่สุมไดมากกวา 5 โปรแกรมจะหยุดการ


ทํางาน

phanlapha@yahoo.com 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);
}
}

ผลที่ได :
_____________________________________________________________
_____________________________________________________________
_____________________________________________________________
_____________________________________________________________
_____________________________________________________________
_____________________________________________________________
_____________________________________________________________
_____________________________________________________________

phanlapha@yahoo.com 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[]) {

}
}

phanlapha@yahoo.com 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);
}
}

ผลที่ได :
_____________________________________________________________
_____________________________________________________________
_____________________________________________________________
_____________________________________________________________
_____________________________________________________________
_____________________________________________________________
_____________________________________________________________
_____________________________________________________________

phanlapha@yahoo.com 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

phanlapha@yahoo.com 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 บาท

phanlapha@yahoo.com 25/25

You might also like