Chap02

  • November 2019
  • PDF

This document was uploaded by user and they confirmed that they have the permission to share it. If you are author or own the copyright of this book, please report to us by using this DMCA report form. Report DMCA


Overview

Download & View Chap02 as PDF for free.

More details

  • Words: 2,613
  • Pages: 25
บทที่ 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

Related Documents

Chap02
December 2019 6
Chap02
May 2020 8
Chap02
November 2019 8
Chap02
July 2020 7
Chap02.pdf
October 2019 19
Ufa#ed2#sol#chap02
November 2019 3