Important Announcement
PubHTML5 Scheduled Server Maintenance on (GMT) Sunday, June 26th, 2:00 am - 8:00 am.
PubHTML5 site will be inoperative during the times indicated!

Home Explore Basic Java

Basic Java

Published by chartsuwun, 2017-04-25 04:13:28

Description: Basic Java

Search

Read the Text Version

เร่มิ ตน กบั Java ฉบบั เรมิ่ ตน (จริง ๆ) ลน่ั ฟา ชมุ สาย ภาควิชาคอมพวิ เตอรธ รุ กจิ วทิ ยาลยั ฟารอสี เทอรน

คาํ นําหนังสือเลมนเ้ี ขยี นขึน้ มาเพือ่ เปนแนวทางใหน กั ศกึ ษา วทิ ยาลัยฟารอสี เทอรน ใชเ ปนคมู อื ในการเรยี นวชิ าหลักการเขยี นโปรแกรมคอมพวิ เตอร (เบอื้ งตน ) เน่ืองจากวา ในระยะเวลา สองถงึ สามปท ผ่ี า นมา หนังสือท่ีทางภาควชิ าคอมพิวเตอรธรุ กจิ ใชเ ปน หนังสอื อา งองิ ในการเรียนการสอนนน้ั โดยสวนใหญแลวจะเปนหนังสือท่แี ตง โดยชาวตา งชาติ ทําใหการใชห นังสือเหลา นนั้ ในการประกอบการเรียนของนักศกึ ษาเปนไปดว ยความลาํ บาก เพราะตองใชเ วลานานในการแปล ถงึ แมวาไดร ับความชว ยเหลอื จาก อาจารยหลาย ๆทานในภาควิชา ในการชว ยชแ้ี นะ ชวยแปล แตกเ็ ปนไปไดเ พียงนอยนดิ เทา น้นั ผูเขียนไดเ ล็งเห็นถึงความสาํ คญั ของการมีหนงั สือไวอ านเอง ในเวลาทีไ่ มส ามารถเขา หาอาจารยไ ด จงึ ไดพ ยายามเขยี นหนังสือเลมนี้ขนึ้ เพ่อื ใหเปน คูม ือทน่ี ักศึกษาสามารถนําไปใชในการคน ควาหาความรใู นเรอื่ งของการเขียนโปรแกรมอกี ทางหนึง่หนงั สือเลมนี้ เปนไดเ พยี งคูม อื อา งองิ เบอ้ื งตน ในการเขียนโปรแกรมคอมพวิ เตอรดวยภาษา Java เทาน้นัเนอ่ื งจากวา Java เปน ภาษาท่ี ถาผูอา นตอ งการทจ่ี ะรถู ึงการใชอ ยา งละเอียด จะตอ งใชเ วลาในการศกึ ษาคน ควา มากพอสมควร ยงั มหี นงั สอื อกี หลายเลมทสี่ ามารถนาํ มาใชเปนแบบอยา งในการเขยี นโปรแกรมไดผเู ขยี นหลายทา นไดนาํ เอาบทความ ตาํ รา และขอชีแ้ นะในการใชภ าษา Java ขน้ึ ไปเก็บไวใ น web siteหลายแหงผอู านควรใช web site เหลานช้ี ว ยในการศึกษา คน ควาเพือ่ ใหการเขียนโปรแกรมดวยภาษาJava เปนไปไดอยา งรวดเรว็ และแมนยาํ มากยงิ่ ข้นึถอยคําและสํานวนในหนงั สอื เลมนี้อาจดแู ปลก ๆ สําหรบั หลาย ๆ ทา น สาเหตุก็เนอ่ื งจากวา ผูเขียนใชสํานวนท่ีตัวเองถนัด และเปนสาํ นวนทผ่ี ูเขยี นเองไดสมั ผสั มาจากตางประเทศ ซ่ึงอาจไมเ ปน ทีถ่ กู ใจของผอู านหลาย ๆ ทาน แตผูเ ขียนขอสัญญาวา จะพยายามทําใหส ํานวนเหลา น้เี ปน สํานวนไทย ๆ ใหไ ดใ นอนาคต อีกส่งิ หนง่ึ ทผี่ ูเ ขยี นไมส ามารถหลกี เล่ยี งไดใ นการเขียนหนังสอื เลม น้ี ก็คอื การใชภาษาองั กฤษควบคูไ ปกบั ภาษาไทยทงั้ นี้กเ็ พราะวา ศัพทท งั้ หลายทีเ่ กย่ี วของกับคอมพวิ เตอรน ้ัน เราไดม าจากภาษาองั กฤษ และผูเขียนเองเห็นวา ควรทจ่ี ะใชศ ัพทเหลา นโี้ ดยตรง โดยไมตอ งแปล หรอื ใชศัพทท ่ีนักภาษาศาสตรชาวไทยไดแปลออกมาใช เพราะจะทําใหเ สยี เวลาเพราะอยางไรเรากท็ ับศัพทเหลา นอี้ ยูแลวผเู ขยี นหวงั วา หนังสอื เลมน้ี จะชวยใหก ารเรยี นเขียนโปรแกรมภาษา Java เปน ไปอยา งราบรืน่ และประสพผลสาํ เรจ็ สาํ หรบั ทุก ๆ ทา นผเู ขยี นขอขอบคณุ อาจารยใ นภาควชิ าทุกทา น ทไี่ ดช ว ยเปน กาํ ลงั ใจและชว ยช้แี นะในเรือ่ งของเน้อื หาในหนงั สือเลม นี้ วา ควรจะครอบคลุมเร่อื งตา ง ๆ มากนอ ยแคไ หน ขอบคณุ อาจารย ชยั รตั น ขนั แกว ทชี่ ว ยอา นและแกไ ขคาํ ผดิ และขอขอบคุณอาจารยอ ีกหลาย ๆ ทานท่ไี ดช ว ยเหลอื และสนบั สนนุ ใหผ เู ขยี น ไดม ีโอกาสเขยี นหนงั สอื เลม นี้ลั่นฟา ชมุ สายเมษายน 2546 ภาควิชาคอมพิวเตอรธรุ กิจ วิทยาลยั ฟารอ สี เทอรน

iสารบัญบทท่ี 1 กอ นจะถงึ Java 1 1 ทาํ ไมถึงเลือก Java เปนภาษาในการเขยี น code 2 เตรยี มความพรอ ม 4 ตดิ ต้งั JDK 5 การกาํ หนด path 6 เขียน code แบบ application หรอื applet 7 การสรา งโปรแกรม Java ท่เี ปน application 8 การ execute โปรแกรม HelloWorld 12 การสรางโปรแกรม Java ทีเ่ ปน applet 13 การเขยี นโปรแกรม Java ดว ย EditPlus 13 ทม่ี าของ Java โดยสังเขป 14บทท่ี 2 ขอมูล ตัวแปร และ การประมวลผล 15 16 ขอ มูล และ ตวั แปร 18 ชนดิ ของขอ มลู 19 23 Keyword 26 Primitive datatype 26 ตวั อยา งการประกาศตัวแปร 29 การกําหนดคา ใหก ับตวั แปร 32 การกําหนดคาใหก บั ตัวแปรภายในโปรแกรม 33 การใช final ในการกาํ หนดคา ใหก ับตัวแปร 35 อายุ และ ขอบเขตการใชงาน ของตัวแปร 37 การสรา งประโยค 39 การประมวลผล 43 การประมวลผลขอมลู ทีเ่ ปน integer 45 การใช operator ตา ง ๆ การประมวลผล short และ byte 49 การเปลยี่ นแปลงขอ มูลดวยการ cast 51 การประมวลดว ยตวั แปรท่มี จี ดุ ทศนยิ ม 58 การประมวลผลขอ มูลตางชนดิ กัน การใช Mathematical Functions ตา ง ๆ 58 การใชขอ มูลท่ีเปน Character 60 การใชต ัวแปรชนิด boolean 68 Logical operator 69 Relational operator 72 การประมวลระดับ bit (shift และ bitwise) 73 การกําหนดคา ใหตัวแปรผานสอื่ นําเขามาตรฐาน 77 80บทที่ 3 การประมวลผลแบบวน (Repetition) 83 การตดั สนิ ใจ และ การเปรยี บเทียบ ประโยคทใ่ี ช if การใช if ในประโยคท่มี มี ากกวาหนง่ึ ประโยค if – else การใช Conditional operator ? : การใช switch การทาํ งานแบบวน การใช for loop การใช StreamTokenizer การใช while loop การใช do … while ภาควิชาคอมพิวเตอรธ ุรกจิ วทิ ยาลยั ฟารอ ีสเทอรน

iiบทท่ี 4 การใช break และ continue 86บทท่ี 5 การใช Nested loop 88บทที่ 6 การใช labeled continue และ labeled break 90 96 การใช Array และ String 97 การใช Array 101 การกําหนดคา เบ้อื งตน ใหกบั Array 104 การอา งถึง array ดวยการ clone และการ copy array 106 การใช array แบบยืดหยุน 106 การคนหาขอ มูลใน array 108 109 การคน หาแบบตามลาํ ดบั 111 การคนหาแบบหารสอง 113 การเรยี งลาํ ดับขอมูล 115 การสราง array ทมี่ ขี อมลู เปน array 116 การใช array ท่มี ขี อ มลู ในแตล ะแถวไมเทากนั 118 การใช String 120 Array of characters 121 String ใน Java 125 การเปรียบเทยี บ String 129 133 มากกวา นอยกวา การเขาหาตัวอกั ษรทีอ่ ยใู น String 134 การใช StringBuffer 136 การกําหนดใหข อ มลู ของ array เปน String 136 138 Objects และ Classes 140 141 Class และ การสราง class 143 ตวั แปรทเ่ี ปนสมาชกิ ของ class 149 Method 150 153 การเขาหาตัวแปร และ method ของ class 155 การสรา ง method 156 กระบวนการท่ีเกิดขึน้ เมอ่ื มกี ารใช parameter list 162 การสงคาแบบ pass by value การสงคา แบบอางอิง 168 การกาํ หนดนโยบายการเขาหาสมาชิกของ class 168 Constructor อกี คร้งั 171 การเรียก constructor จาก constructor 175 การ overload method 179 การสราง class ภายใน class 181 Package การสรา ง package การสรา ง class ใหมจ าก class เดมิ และ การถา ยทอดคณุ สมบัติ การใช this และ super() การใช protected การ override method Polymorphism การสง และ รบั object การสรา ง interface ภาควิชาคอมพิวเตอรธ รุ กจิ วทิ ยาลยั ฟารอสี เทอรน

iiiบทท่ี 7 การตรวจสอบและดักจบั Error (Exceptions) 188 การ throw exception 188 การใช try และ catch 190 การใช try และ catch ใน loop 192 การใช printStacktrace() 192 การใช throw กบั try 195 การสรา ง exception ใชเอง 198บทที่ 8 Streams I/O 204 การใช File 205 การใช FileNameFilter 208 Input และ Output streams 210 การใช FileReader การใช FileInputStream และ read() 211 การใช StreamTokenizer กบั FileReader 213 ขอ ดีของการใช BufferedReader 217 การใช delimiter กับ text file 218 การใช FileWriter และ PrintWriter 218 Binary file 221 การใช DataInputStream และ FileInputStream การใช DataOutputStream และ FileOutputStream การใช writeUTF() และ readUTF() การใช PrintWriter เพ่อื ผลลพั ธท ่ีสวยงาม 224 การใช writeChars() 228 การสรา งและใช Random-access file 229 การใช seek() 233 การ update record 234ตารางตา ง ๆ 240 ตาราง ASCII และ UNICODE (บางสว น) ตาราง Constant ทใ่ี ชบ อ ย ๆ ในโปรแกรม ตาราง ชนดิ ของขอ มลู ตาราง Escape sequences ตาราง Format ตาง ๆ สาํ หรับขอ มลู ท่เี ปนตัวเลข ภาควิชาคอมพิวเตอรธ รุ กจิ วทิ ยาลยั ฟารอ สี เทอรน

ในบทท่ีหน่งึ น้ีเราจะมาดูการตดิ ตง้ั เคร่อื งมอื ทใ่ี ช ในการพัฒนาโปรแกรมดว ยภาษา Java ตัวอยางการเขยี นโปรแกรมในรปู แบบของ application และ การเขยี นโปรแกรมในรปู แบบของ appletหลังจากจบบทน้ีแลว ผูอ านจะไดท ราบถงึ o การตดิ ต้ังเครือ่ งมอื ท่ใี ชใ นการพัฒนาโปรแกรมในภาษา Java o การเขยี นโปรแกรมในรปู แบบของ application o การเขยี นโปรแกรมในรูปแบบของ applet o การเขียน HTML ไฟลท ใี่ ชใ นการ execute applet o การเขยี นโปรแกรม Java ดว ย EditPlus o ประวัตคิ รา ว ๆ ของภาษา Javaทาํ ไมถงึ เลอื ก Java เปน ภาษาในการเขียน codeJava เปนภาษาทน่ี ักพฒั นาโปรแกรมสามารถทจี่ ะเขยี น code เพียงครง้ั เดยี ว แลว นาํ ไปใชไดกับเครอื่ งcomputer ชนดิ (platform) ตา ง ๆ ได โดยไมตอ ง compile ใหม เชน ถา เราเขยี นโปรแกรมบนเคร่อื ง pcเราสามารถทจี่ ะนาํ เอา code ท่ีได compile เรยี บรอ ยแลวไป execute ในเครื่องอ่ืน ๆ ทไ่ี มใช pc ได เชนapple, linux, unix, หรอื อื่น ๆ ท่ีมี JVM หรอื Java Virtual Machine อยูJava เปน ภาษาที่ไดถ กู พฒั นาขึน้ เพอื่ สนองตอการพัฒนาโปรแกรมในรปู แบบของการเขียนโปรแกรมที่เรียกวา OOP หรอื Object-Oriented Programming ซงึ่ เปน ภาษาทีช่ ว ยใหการพฒั นาโปรแกรมมคี วามยืดหยุนสงู ผเู ขยี น หรือ ผพู ฒั นาสามารถทีจ่ ะสนองตอบความตอ งการของผูใช (user) ไดมากกวา การพฒั นาในลักษณะของการเขยี นโปรแกรมแบบเดมิ (procedural language programming) และท่สี าํ คญัอกี อยางหนึ่งกค็ อื Java เปน ภาษาทีไ่ มตองเสยี คาใชจ ายใด ๆ เลย เราสามารถทีจ่ ะ download โปรแกรมสาํ หรบั การพฒั นาไดจ ากบรษิ ทั Sun Micro System หรือทอี่ ืน่ ๆ ท่ีทาง Sun ไดอนญุ าตใหม ีการdownload ไดกอ นทเี่ ราจะเขยี นโปรแกรมดวย Java เราตองมีอะไรบาง1. เชนเดยี วกนั กบั การเขยี นโปรแกรมในภาษาอ่ืน ๆ เราตองมี Text Editor ทใี่ ชส รา งและเกบ็ source code2. JDK (Java Development Kit) ซึ่งมีหลาย version ลา สดุ ในขณะทีเ่ ขยี นตาํ ราเลม นี้ คอื J2SE 1.4 ซ่ึง download ไดท ่ี http://sun.java.com เราตอ งใช JDK ในการ compile โปรแกรมทเี่ ราไดเ ขียน ขึ้น3. Java VM หรอื ทีเ่ รียกวา Java Virtual Machine ซง่ึ เปนตัวกลางที่เปลยี่ น code ทีไ่ ดจากการ compile เปน code ท่สี ามารถ execute บนเครื่องตาง ๆ (code ท่ีเคร่ืองนน้ั ๆ รจู ัก – machine code) โดยปกติ VM จะถกู ติดตัง้ พรอมกับ JDKถา เรามอี ุปกรณท ั้งหมดท่ไี ดกลาวมาแลว ขน้ั ตอนตอ ไปที่เราตองทาํ เพ่อื ใหก ารพัฒนาโปรแกรมของเราเปน ไปไดดว ยความเรียบรอ ย (ไมมีอุปสรรคทค่ี าดไมถ งึ ) เราตองเตรียมความพรอมของเครอื่ งกอ น

บทท่ี 1 กอนจะถึง Java 2เรม่ิ ตนกับ Javaเตรียมความพรอม (สาํ หรบั pc)1. ติดต้ัง JDK2. กําหนด path ภายในเครอื่ งเพอ่ื ใหการ compile และ execute (run) โปรแกรมเปน ไปได – ถาเราไม กาํ หนด path เครอื่ งของเราจะไมรจู กั คําสง่ั ตา ง ๆ ท่ี Java ใชตดิ ตง้ั JDKเมื่อ download JDK มาแลว การตดิ ต้ังกท็ ําไดงาย เน่อื งจาก JDK เปน ไฟลทเ่ี ราเรยี กวา self-extractingfile คอื ไฟลท จี่ ะตดิ ตัง้ โดยอตั โนมัตเิ มอ่ื เรา execute (doubling click หรือ ดวยวธิ ีการอ่นื ๆ เชน clickบน icon ของ file แลว กด enter) สาํ หรบั ไฟล j2se1.4.1 น้ันมขี นาดประมาณ 35.9 MB ซ่งึ เปนไฟลท่ีใหญพอสมควร และใชเวลานานในการ download (ถา speed ในการ download ไมด พี อ) ซง่ึ เมื่อขยายออกจะมขี นาดประมาณ 64.6 MB เพราะฉะนนั้ เราตอ งเตรยี มเนอื้ ท่ีไวใ หเ หมาะสมในการ install JDK ถาหากวาเนอ้ื ที่ในการจัดเก็บมนี อย เรากค็ วรใช JDK version อน่ื ๆ ทีม่ ขี นาดเลก็ กวาการกาํ หนด pathถาการพฒั นาโปรแกรมเปนการพัฒนาบนเครอ่ื ง Windows 9x การกําหนด path ก็สามารถทจ่ี ะทําไดด ว ยวิธกี ารตาง ๆ ดงั นี้1. เปดไฟล autoexec.bat แลวเพมิ่ path ทีไ่ ดต ดิ ต้งั JDK ไว ซึ่งถา เราติดต้ัง J2SDK 1.4.1 ไวใน drive c การกาํ หนด path ในไฟล autoexec.bat กท็ าํ ไดดงั น้ี ใสค ําสง่ั set path=c:\j2sdk1.4.1\bin ในบรรทัดใหมถ า ยังไมม มี คี าํ สัง่ set path อยูเลย แตถา มกี าร ใช คําส่งั set path อยูแ ลวก็ใหใส ; (semicolon) หลังตัวสดุ ทายของ path แลวจงึ ใส c:\j2sdk1.4.1\bin2. หรือเราอาจกาํ หนด path ทุกครั้งกอ นการเขยี นโปรแกรม (ถา เราไมไ ดก าํ หนดในไฟล autoexec.bat) โดยไปที่ Command Prompt (หรือทรี่ จู ักกันในคนรุนเกา วา dos window) แลว ก็ set path บน (dos) Command Prompt3. ทําการพฒั นาโปรแกรมใน directory ท่ีมี JDK อยู เชน เปลีย่ น drive ไปท่ี c:\j2sdk1.4.1\bin แลว เริม่ ทํางานใน directory น้ี ไฟลท ุกตวั ทเี่ กยี่ วขอ งกับการเขียนโปรแกรมจะตอ งเก็บไวทนี่ ่ี – วธิ นี ี้ ไม แนะนํา เพราะจะทาํ ให directory ของ java เปรอะไปดวยไฟลทีเ่ ราเขียนขึ้นเองถา เราใช Windows XP หรือ Windows 2000 การกําหนด path ทาํ ไดด ว ยขนั้ ตอนตอ ไปนี้ (Windows XPและ Windows 2000 ใชค ําส่ังท่ีแตกตา งกันนดิ หนอย ตวั อยา งทท่ี าํ ใหด ูน้ี เปนการกําหนด path บนเครอ่ื งท่ีใช Windows XP)1. กดปมุ ขวาของ mouse บน icon My Computer (หรือ ไปท่ีปมุ start ทมี่ มุ ลา งซายของจอแลว เลอื ก My Computer) แลว เลอื ก Properties ภาควิชาคอมพิวเตอรธรุ กิจ วิทยาลยั ฟารอสี เทอรน

บทท่ี 1 กอนจะถึง Java 3เร่มิ ตนกับ Java2. กดปมุ advanced บน System Properties3. กดปมุ Environment Variables4. ใน System Variables เลอื กขอความที่ขึน้ ตนดว ยคาํ วา Path5. เม่อื กดปมุ Edit ก็จะไดห นาจอดังทเี่ ห็น ภาควิชาคอมพิวเตอรธ ุรกจิ วิทยาลยั ฟารอ สี เทอรน

บทท่ี 1 กอ นจะถึง Java 4เรม่ิ ตน กบั Java6. เติม ; (semicolon) ถา ยังไมม ี แลว จงึ ใส path ทไี่ ด install JDK ไว เสรจ็ แลว กดปมุ OK เพือ่ ใหร ะบบ บันทึกการเปลย่ี นแปลงที่ไดท าํ ขึ้นหลงั จากทีไ่ ดก าํ หนด path ใหก ับเครือ่ งท่เี ราจะใชใ นการเขยี นโปรแกรมแลว ขัน้ ตอนตอ ไปก็ข้ึนอยูก บัผเู ขียน การพฒั นาโปรแกรมกท็ าํ ไดโดยไมต อ งวุนวายกบั การกาํ หนด path ตา ง ๆ อีก (ยกเวน เสียแตว าpath ทีไ่ ดก ําหนดขึน้ ไมมอี ยูจ รงิ – เราก็ตองกลับไปเรม่ิ ตนใหม พรอมกบั path ทมี่ ีอยูจริง)ทง้ั น้ที ั้งน้ัน ผูพฒั นาโปรแกรมตอ งเลือกเองวา วธิ ไี หนเหมาะสมทส่ี ุด ถา ตอ งใช Java อยูบ อย ๆ และสมํา่ เสมอกค็ วรทจี่ ะเลือกกําหนด path แบบถาวร เพ่ือจะไดไ มตองเสยี เวลากับการกาํ หนด pathส่ิงทส่ี ําคญั อกี สงิ่ หนง่ึ ท่ขี าดไมไดใ นการทดสอบและ execute code ทีเ่ ขียนขน้ึ ดวย Java ก็คือ JRE หรอืทเ่ี รยี กวา Java Run-time Environment ถาเรานําเอา code ทีไ่ ดผ า นการ compile จาก JDK แลว ไปexecute บนเครื่องทีย่ งั ไมไ ดต ดิ ตัง้ JRE ผลลัพธก ็คอื execute ไมไ ด แตถ า เคร่ืองน้นั ไดรบั การติดตั้ง JDKกจ็ ะไดรบั การตดิ ต้งั JRE พรอมกันไปดว ย ดงั ท่ีไดก ลาวไวกอ นหนา นี้ สาเหตทุ ่ี Sun ทําแบบน้กี ็เพราะวาหลาย ๆ คนอาจไมใ ชผ พู ัฒนา Java โปรแกรมแตเ ปนผใู ชโ ปรแกรมที่เขียนข้นึ ดวย Java ก็ได ดังนนั้ หากเครือ่ งใด ๆ ตอ งใชโ ปรแกรมทเ่ี ขยี นขนึ้ ดว ย Java บอย ๆ กต็ อ ง download JRE มาไวท ่ีเครอ่ื งดวยเขยี น code ทเ่ี ปน application หรอื เขยี น code ที่เปน appletApplet เปน code ทเ่ี ขยี นขึน้ มาเพอื่ ใหส ามารถทจ่ี ะ execute ใน web browser ผา นทาง HTML ไฟล ซง่ึโดยท่ัวไปมกั จะมขี นาดเลก็ เพอ่ื ใหการ download applet ทาํ ไดร วดเรว็ ยง่ิ ขึ้น สว น application เปนการexecute ไฟลผานทาง command line ดงั น้ันขนาดจึงไมเปน อุปสรรค (เพราะไมต อ งมกี าร download)หนงั สือเลม นีจ้ ะแสดงโปรแกรมตวั อยา งดวยการเขียน code ในรูปแบบของ applicationเครื่องมือ หรอื คาํ สั่ง (SDK tools) ที่ตอ งใชใ นการพฒั นาโปรแกรมJava Development Kit ไดถ กู เปลี่ยนใหมชี อ่ื เปน J2SDK – Java 2 Software Development Kit ดงั นัน้เราจะใชช ือ่ เครอื่ งมือในการพฒั นาโปรแกรมน้สี ลบั กนั ไปมา แตใ หต ง้ั สมมตฐิ านวา ท้งั สอง ตา งก็เปนเครือ่ งมอื ที่ใชใ นการพัฒนา Java โปรแกรมเชน เดยี วกนัjavac เปนเครอื่ งมือทใ่ี ชในการ compile (compiler) ทท่ี ําการเปลยี่ น source code ท่เี รา เขยี นขนึ้ ใหเปน byte codejava เปนเครอื่ งมือทใ่ี ชใ นการ execute byte code สําหรับโปรแกรมทเ่ี ขยี นขึน้ ในแบบของ applicationappletviewer เปนเคร่ืองมอื ทใี่ ชในการ execute โปรแกรมท่เี ขยี นขึน้ ในแบบของ appletยังมีเคร่ืองมืออกี หลายตัวที่ java มใี ห แตต อนนี้เราจะใชเฉพาะเครือ่ งมือทไ่ี ดก ลา วไวแคส ามตัวนี้ เทา นนั้การพัฒนาโปรแกรมทัง้ ที่เปน application และ applet นั้นจะมขี น้ั ตอนท่แี ตกตา งกนั พอสมควร ดงั แสดงใหเหน็ ในภาพที่ 1-1 และในภาพที่ 1-2 ในการเขยี น code น้ันเราจะตองมี editor ที่เปน text editorกลา วคือเปน editor ที่ไมมีการเก็บ format ตาง ๆ ของตัวอกั ษรดงั เชน ท่ี Microsoft Word เกบ็ แตจะเกบ็เปน รหัส ASCII ที่ SDK สามารถอา นและ execute ได สมมตวิ า เรามี text editor และ SDK แลวการพฒั นากเ็ ปนไปตามขนั้ ตอนท่แี สดงในภาพทัง้ สอง ภาควิชาคอมพิวเตอรธุรกจิ วทิ ยาลยั ฟารอ ีสเทอรน

บทที่ 1 กอนจะถึง Java 5เร่มิ ตนกบั JavaText Editor Javac Java Class File First.class Java Source File First.java Java Java Program Outputภาพท่ี 1-1 ข้นั ตอนการพฒั นาโปรแกรมที่เปน applicationText Editor Javac Java Class File Java Source File First.class First.java appletviewer HTML file Java Program First.html Outputภาพท่ี 1-2 ขนั้ ตอนการพฒั นาโปรแกรมทเี่ ปน appletการสรา งโปรแกรม Java ทเ่ี ปน applicationสมมตวิ าเราเลอื กใช text editor ตัวใดตวั หนง่ึ ท่มี ีอยมู ากมาย ทงั้ ท่ี free และท้ังท่ตี อ งจายเงนิ ซอ้ื มา เราก็มาลองเริม่ เขียนโปรแกรมตัวแรก กันเลยดีกวาเพื่อใหเ ขา ใจไดง า ยถงึ ข้นั ตอนและท่ีมาทีไ่ ปในการเขียนโปรแกรมดว ยภาษา Java เราจะเขียนโปรแกรมท่ีไมท ําอะไรมากมายนกั เพยี งแตส ง ขอ มูลไปยงั หนา จอเมอ่ื user เรียกใช (execute) โปรแกรมน้ี เราจะตงั้ชอื่ โปรแกรมนว้ี า HelloWorld.java และมีขอ มูลดังนี้class HelloWorld { public static void main(String[] args) { System.out.println(\"Hello World\"); }}ผอู า นยงั ไมต องกังวลกับความหมายของ keyword ตา ง ๆ ทเ่ี หน็ ในตอนนี้ หลงั จากท่เี ขียนโปรแกรมไดสกัพักหนึ่ง ผูอ า นก็จะเขาใจถึงความหมายเหลาน้ีดีข้นึ แตต อนนตี้ อ งเขา ใจวา ไฟลท ่ีเราเขียนขึ้น มีนิยามของ ภาควิชาคอมพิวเตอรธ รุ กิจ วทิ ยาลัย ฟารอสี เทอรน

บทท่ี 1 กอนจะถึง Java 6เร่มิ ตน กับ Javaclass ท่เี ราเขยี นขึน้ ช่ือ HelloWorld ซึง่ Java กาํ หนดไววา ชอ่ื ของ class และชอ่ื ของไฟลทีเ่ ก็บ codeของ class นจ้ี ะตองเปนชื่อเดียวกันclass น้ีมี method อยูห นึง่ ตวั ช่ือ main() เมอ่ื เรา execute โปรแกรมน้ี JRE จะคน หา method ทีช่ ่อืmain() เพ่อื ทาํ การ execute ทั้งน้ี method main() จะตองมี keyword ทช่ี ่อื public, static, และ voidอยู รวมไปถงึ parameter ทีเ่ ปน array ท่เี ก็บ String ดวย ถาผอู านเคยเขียนโปรแกรมดว ย ภาษา C หรือภาษา C++ มากอนก็จะเหน็ ถงึ ความคลา ยคลงึ กันของ method main() นี้Parameter ของ method main() ท่ีเปน String[] args หมายถงึ command-line argument ตา ง ๆ ที่ผใู ชโปรแกรมสง ผานไปยังตวั โปรแกรมเพอ่ื เอาไวใชในการทาํ งานตาง ๆ ซ่งึ เราจะยังไมก ลา วถงึ ในเวลานี้ในตวั method main() เองมีประโยคทข่ี ้นึ ตน ดวย System.out.println(\"…\") ซ่ึงเปน คาํ สง่ั ทใ่ี ชสงขอความไปยัง System.out ที่โดยทวั่ ๆ ไปกค็ อื console window หรือทเี่ รยี กกันตดิ ปากวา dos windowหรอื dos prompt ดงั ตวั อยา งทแ่ี สดงใหเ หน็ ในภาพที่ 1-3ภาพท่ี 1.3 การ compile และ run โปรแกรมการ compile โปรแกรม HelloWorldดังเชนทแี่ สดงใหเห็นในภาพที่ 1-3 การ compile ไฟลที่เขียนขึ้นตองใชค าํ ส่งั javac ตามดว ยช่ือไฟลพรอมกบั นามสกลุ ดังน้ีjavac HelloWorld.javaในการ compile ทุกคร้งั เราจะตองไมล มื ใสน ามสกลุ ใหก บั ไฟลท เ่ี ราไดเขยี นข้นึ ไมเ ชน นนั้ แลว compilerจะฟอง โดยการสง error message ใหเราเชน ถา เรา compile ไฟล HelloWorld โดยไมใ ส .java เราก็จะได error ดังน้ีE:\bc221Book\source>javac HelloWorldjavac: invalid flag: HelloWorldUsage: javac <options> <source files>where possible options include:-g Generate all debugging info-g:none Generate no debugging info-g:{lines,vars,source} Generate only some debugging info………(ผูเขยี นไดต ัดขอ ความบางสว นที่ java ฟองออก - ใช … แทน)การ execute โปรแกรม HelloWorldสมมตวิ าเรา compile โปรแกรม HelloWorld โดยไมมี error ใด ๆ เกดิ ข้นึ การ execute โปรแกรมกท็ าํ ไดดว ยคําสงั่ java ตามดวยชอื่ ไฟล ดงั น้ีjava HelloWorldและกจ็ ะได output ดังท่เี ห็นในภาพที่ 1-3 ภาควิชาคอมพิวเตอรธ ุรกจิ วทิ ยาลยั ฟารอ สี เทอรน

บทท่ี 1 กอนจะถึง Java 7เร่มิ ตนกับ Javaในการ execute โปรแกรมนนั้ เราจะไมใ ส .class ตามหลงั ชอื่ ไฟล (ถึงแมว า เราตองมไี ฟลน ก้ี ็ตาม) ถา เราใส compilerก็จะฟองดว ย error ทบ่ี อกวา หาไฟลไ มเจอ (java.lang.NoClassDefFoundError) ดังทเ่ี หน็น้ีสรปุ ข้นั ตอนของการพฒั นาโปรแกรมท่ีเปน application1. compile ดวยคาํ สัง่ javac ตามดว ยชื่อไฟล พรอ มกบั นามสกุล2. execute ดว ยคาํ สงั่ java ตามดวยชอื่ ไฟลโ ดยไมมีนามสกุลใด ๆ ตอ ทา ยการเขียนโปรแกรมทด่ี ีนน้ั ผเู ขยี นควรใสค ําอธบิ าย (comment) ถึงการทํางานของโปรแกรมที่เขียนข้ึนเพือ่ ใหผ ทู ี่นาํ โปรแกรมไปใช หรือผูอา นคนอน่ื เขา ใจถึงวิธกี ารใชทถี่ กู ตอ ง ในการเขยี น comment ดวยภาษา Java น้นั มกี ารทําไดส องวธิ ี คือ1. การใช //2. การใช /* … */การใชใ นแบบทห่ี นึ่งนั้น เปน การใส comment ไดไ มเ กิน 1 บรรทดั สว นการใชใ นแบบทสี่ อง ผใู ชส ามารถทีจ่ ะใส comment ไดม ากกวาหน่ึงบรรทัด แต comment ตองอยูภายในเครอื่ งหมาย /* … */ เทา นนั้ ดงัตัวอยา งจากการนําโปรแกรม HelloWorld มาเขียนใหมด ว ย comment// My first Java program - HelloWorldclass HelloWorld { /* Java launcher will call this method (main). This will display a message to the screen. */ public static void main(String[] args) { System.out.println(\"Hello World\"); }}การสรา งโปรแกรม Java ทเ่ี ปน appletในการเขียนโปรแกรมทเ่ี ปน Java applet น้นั เราจะตองมไี ฟลอยอู ยา งนอย 2 ไฟล ซ่งึ หนึ่งในน้นั คอื Javasource file และอกี ไฟลหน่งึ คอื HTML file เราลองมาเขยี น applet เลก็ ๆ ท่ีสงขอ ความไปยงั webbrowser เหมือนกบั ทเ่ี ราเขยี น application กอ นหนา นี้//my first Java applet - HelloWorldAppletimport java.applet.Applet;import java.awt.Graphics;public class HelloWorldApplet extends Applet { public void paint(Graphics g) { g.drawString(\"Hello World\", 25, 25); }} ภาควิชาคอมพิวเตอรธ รุ กิจ วทิ ยาลยั ฟารอีสเทอรน

บทที่ 1 กอ นจะถึง Java 8เร่ิมตนกับ Javaเน่ืองจากวา เราตอ งการ applet สําหรับการสงขอความไปยัง web browser ดังนั้นเราจึงตอ งดึงเอาเครอื่ งมือทชี่ ว ยใหเ ราสามารถแสดงขอความทวี่ า ดวยการใชก ารถายทอดคณุ สมบัติ (inheritance) ท่ีJava มใี หดว ยการเพิ่มคําวา extends Applet ทางดา นหลงั ของ class HelloWorldApplet เราจะยังไมพดูถึงรายละเอียดเก่ยี วกบั การถายทอดคุณสมบตั ขิ อง Java ตอนน้ี อีกสิ่งหนึง่ ทข่ี าดไมไ ดใ นการเขยี น appletของเราตอนนก้ี ค็ อื method paint() ซง่ึ เปน method ท่ที าํ การวาดขอ ความลงบน applet ดวยการเรียกใชmethod drawstring() จาก class Graphics ในตําแหนง ที่กาํ หนดไว จากคาํ สง่ั น้ีg.drawString(\"Hello World\", 25, 25);เมอ่ื compile โปรแกรม HelloWorldApplet ดวยคาํ สงั่ javac แลว เรากส็ ามารถท่ีจะ execute applet ไดดว ยการเรยี ก HTML ไฟลท ่เี ขยี นข้นึ ดังนี้<html><applet code=\"HelloWorldApplet.class\" width=\"200\" height=\"80\"></applet></html>ดวยการใช applet tag ใน HTML ไฟลพรอมกบั การใสช อื่ ของ Java ไฟลท ่ี compile แลว ในสวนของfield ท่ชี ่อื code และกาํ หนดขนาดความกวา งของ applet ใน field ทีช่ ื่อ width และความยาว (สูง) ในfield ทช่ี ื่อ heightการ execute ไฟล HelloWorldApplet.html กส็ ามารถทําไดด ว ยการใชค ําสง่ั appletviewer ตามดว ยช่ือไฟล เรากจ็ ะได output ดังน้ีสรปุ ข้นั ตอนการเขยี นโปรแกรมแบบ applet1. สรา ง Java source file ดว ยการ extends Applet2. สราง HTML file ที่มี applet tag และขอ มูลท่ีสาํ คัญในการแสดง applet คือ (1) class file ของ Java โปรแกรม (2) ขนาดของ applet – width และ heightเราจะกลบั มาดวู ธิ ีการเขียน applet อีกคร้ังหนง่ึ หลังจากท่เี รา ไดศึกษาถึงโครงสรา งตา ง ๆ ของภาษาJava ข้นั ตอนการออกแบบ และการเรยี กใช class รวมไปถงึ เทคนคิ และวธิ ีการใช method ตาง ๆ ท่ี Javaมีใหการเขยี น Java program ดวย EditPlusตัวอยา งของโปรแกรม HelloWorld.java ทเ่ี ราไดเขียนขน้ึ กอ นหนานใ้ี ชภาษาอังกฤษทงั้ หมดในการเขียนผลลัพธท ี่ไดจ ากการ run โปรแกรมก็เปนภาษาองั กฤษ ผานทาง Dos Window ถา เราตอ งการทจ่ี ะเขยี นโปรแกรมเพื่อใหแ สดงผลลัพธ หรือ ขอ ความทเี่ ปน ภาษาไทยน้ัน จะตอ งใช Operating System ที่รองรับการปอ นและสงขอมลู ทเ่ี ปนภาษาไทย เชน Windows ตาง ๆ ท่ีสรางข้นึ มาเพอ่ื คนไทยโดยเฉพาะ ซึง่ จะสงั เกตไดจากคาํ วา Thai Edition หรือ คําวา ไทย ตอ ทาย แตกม็ ี OS หลาย ๆ ตวั ทยี่ อมใหม ีการปอ นและสงขอ มลู ทีเ่ ปนภาษาไทยผานทางชอ งทางอน่ื ๆ ที่ไมใช Dos Window ในการฝก ฝนการเขียนโปรแกรมJava ใหม ๆ นนั้ เราจําเปนทจ่ี ะตอ งมีชอ งทางในการแสดงผลทส่ี ามารถใชไ ดทั้งภาษาไทย และภาษาองั กฤษ ดงั นั้นเพ่อื ใหการปอนและสงขอ มลู ใชไดท งั้ ภาษาไทยและภาษาอังกฤษ เราจะเลอื กใชText Editor ที่รองรบั ภาษาไทย เชน EditPlus (มี Text Editor หลายตวั ทร่ี องรบั ภาษาไทย แตเราจะพดูถึงเฉพาะ EditPlus เทา น้นั ) ภาควิชาคอมพิวเตอรธ ุรกจิ วิทยาลยั ฟารอ สี เทอรน

บทท่ี 1 กอ นจะถึง Java 9เรม่ิ ตน กับ Javaกอนอ่นื เราตองหา EditPlus มาติดตัง้ ในเคร่ืองทีเ่ ราใชในการสรา งโปรแกรมดวยภาษา Java เสยี กอ น ซง่ึสามารถท่ีจะไป download มาไดจ าก www.editplus.com โปรแกรมตวั น้เี ปน shareware ท่มี ีอายกุ ารใชงานเพยี งแค 30 วนั หลังจากนน้ั กค็ งตองควกั กระเปาจา ยใหก ับเจา ของโปรแกรมตามระเบยี บ ซ่งึ กไ็ มแ พงเทาไรนัก เม่ือ install เรยี บรอ ยแลว กใ็ หเขาไปใน menu ท่ีชอื่ วา Toolsเลอื ก Preferencesclick ที่ Fonts และเลือก Default (edit window) จาก Drop-down menu ในชอ งทชี่ ื่อ Area เสรจ็ แลวใหเลอื ก font ที่สามารถใชภาษาไทยได เชน Tahoma ดังทเ่ี หน็ ในรูป เสร็จแลว ก็เรม่ิ ทําในลกั ษณะเดียวกันกับ Output window ภาควิชาคอมพิวเตอรธรุ กิจ วิทยาลัย ฟารอสี เทอรน

บทที่ 1 กอนจะถึง Java 10เร่มิ ตน กบั Javaหลงั จากท่ี set คาใหกบั editor และ output window เรียบรอ ยแลว เรากต็ อ งมา set ให EditPlus รูจกักับการ compile และ execute โปรแกรมในภาษา Java เร่มิ ตนดวยการ click ท่ี User tools ในPreferences และกดปมุ Add Tool>> เพ่ือเลอื ก Programเสร็จแลว ใหใ สข อ มลู ดงั ตัวอยา งท่ีเหน็Menu Text: Compile Java Source FileCommand: ทที่ ผ่ี ูอา นได install Java ไว เชน c:\j2sdk1.4.1\bin\javac.exeArgument: $(FileName) เลอื กจาก drop-down listInitial directory: $(FileDir) เลือกจาก drop-down listพรอมกบั ใสเครอ่ื งหมาย 9 ในชอ ง Capture output ภาควิชาคอมพิวเตอรธุรกิจ วิทยาลัย ฟารอ ีสเทอรน

บทที่ 1 กอ นจะถึง Java 11เริ่มตน กับ Javaเสรจ็ แลวใหเพ่ิมคําสัง่ ให EditPlus รจู กั การ run หรือ execute โปรแกรมทไ่ี ด compile เรียบรอ ยแลวดวยการกดปมุ Add tool>> อีกครงั้ หนงึ่ พรอมกับใสข อ มูลทเี่ หน็ นี้เมอ่ื ทาํ ทุกอยางเรียบรอ ยแลว ใหกดปุม OK เพอื่ ทาํ การบนั ทกึ คาํ สง่ั ท่ีเราสรา งข้นึ ให EditPlus รูจักและเมื่อไดเปลย่ี นแปลงไฟล HelloWorld.java ดว ยการเพม่ิ ขอความที่เปน ภาษาไทยเขาไปในประโยคSystem.out.println(…) เชนในตวั อยา งน้ีclass HelloWorld { public static void main(String[] args) { System.out.println(\"Hello World! สวสั ดคี รับ โลกเกา ๆ ใบนี้\"); }}เราก็ compile ดว ยการกด Ctrl + 1 และเมื่อ compile เสรจ็ เรากจ็ ะไดร ับขอ ความดงั ท่เี หน็ น้ีหลังจากนน้ั เราก็ run ดวยการกด Ctrl + 2 ก็จะไดผ ลลัพธด งั ทีเ่ หน็ นี้ ภาควิชาคอมพิวเตอรธ ุรกิจ วทิ ยาลยั ฟารอ สี เทอรน

บทที่ 1 กอ นจะถึง Java 12เรมิ่ ตน กับ JavaEditPlus ยงั มี features ตาง ๆ อกี มากมายทเี่ ราสามารถที่จะ set ไวชวยในการทาํ งานของเราได ทงั้ น้ีผอู านสามารถท่ีจะหาขอมลู เพม่ิ เตมิ ไดจ าก help file ของตัว EditPlus เอง แตถาผอู านอยากใช TextEditor ตวั อื่นผเู ขยี นขอแนะนาํ อกี ตัวหนง่ึ คือ Crimson ซง่ึ เปน editor ท่ีไมตอ งเสยี คา ใชจ า ยใด ๆ เลยและสามารถที่จะ download ไดจ ากหลาย ๆ ที่ใน WWWทีม่ าของภาษา Java โดยสังเขปJava เปน ภาษาทเี่ กิดขึน้ จากการพัฒนาของบรษิ ัท Sun Microsystems โดยมที มี่ าจากภาษาทชี่ อื่ วา Oakซ่ึงเปน ภาษาทใี่ ชภ ายใน Sun เองแตหลังจากที่ Sun ไดพ ฒั นา Oak และใชมาอกี ระยะหนงึ่ Sun กไ็ ดนาํ เอา Oak ออกมาสสู ายตาชาวบา นทว่ั ไป แตเ นอื่ งจากวา ชอื่ ของ Oak ไดมีผใู ชอยกู อ นแลว Sun จงึตอ งหาชอื่ ใหมใ หกับภาษาน้ี ซง่ึ ในตอนแรกก็ไดท ดลองหลายช่ือ เชน Silk, Ruby, และ WRL (WebRunner Language) แตช ่อื เหลา นีก้ ไ็ มไดถกู เลือก ในท่ีสดุ Java กก็ ลายเปนชื่อของภาษานี้ (ท้ัง ๆ ทไ่ี มม ีอะไรเกยี่ วของกับ กาแฟ จาก ชวา หรอื อะไรท่เี กยี่ วของกับเกาะชวาเลย)Java มอี ยมู ากมายหลาย version แต version ลาสุดของ Java ขณะทีเ่ ขียนตาํ ราเลม น้ี คือ J2SDK1.4.1ผูอา นสามารถตดิ ตาม version ใหม ๆ และ download ไดที่ web site ของ Sun ทไ่ี ดใ หไ วก อ นหนา นี้ในบททสี่ องเราจะมาทําความรจู กั กับขอกําหนด ตาง ๆ ของ โปรแกรม ขอมลู (data) ตวั แปร (variable)และ การประมวลผล (calculation – evaluation) ภาควิชาคอมพิวเตอรธรุ กจิ วทิ ยาลยั ฟารอีสเทอรน

ในบททสี่ องน้ีเราจะมาทาํ ความเขา ใจในเรือ่ งของชนดิ ขอ มลู ท่ี Java มไี วใ นการรองรับการเขียนโปรแกรมทัง้ ขอมลู ที่เปน ตวั เลข และขอ มูลทเ่ี ปน ตวั อักษร เราจะทดลองเขยี นโปรแกรมดวยขอ มูลชนดิ ตา ง ๆ นี้หลงั จากจบบทเรียนน้แี ลว ผูอา นจะไดท ราบถงึ o วธิ ีการประกาศตัวแปร (variable declaration) ทีม่ ชี นิดเปน integer และ floating-point o วิธีการประกาศตวั แปรท่มี ชี นิดเปน character และ boolean o วธิ กี ารกาํ หนด (assignment) คา ใหกับตัวแปรตาง ๆ o การสรา งประโยค (statement หรอื expression) o การประมวลผล (calculation และ evaluation) ทเี่ ก่ยี วกบั ตวั แปรชนดิ ตาง ๆ o การเปล่ยี นแปลง (casting) ชนดิ ของขอ มูล o การใชฟ งคช น่ั ทางคณติ ศาสตร (Mathematical Functions) ท่ี Java มีใหขอมลู และ ตวั แปร (data and variable)โดยทั่วไปถา เราตอ งการคาํ นวณหาคาทางคณติ ศาสตร เชน 354 + 45 * 12 เรามกั จะใชเ คร่ืองคดิ เลขหรือไมก ใ็ ชวธิ คี ดิ ในกระดาษ ซงึ่ วธิ ีคดิ แบบทสี่ องนีเ้ ราใชกระดาษเปน ตัวกลางในการหาคานั้น ๆ กลาวคอืเราใชกระดาษเปนทเี่ กบ็ ตัวเลขทตี่ องการหาคา รวมไปถงึ ผลลพั ธข องการหาคานัน้ ๆ ดว ย เชน เดียวกับการเขียนโปรแกรมทางคอมพวิ เตอร คา ตาง ๆ เหลา นี้จําเปนจะตอ งมที ่ีเก็บ และทีเ่ กบ็ ขอมูลเหลาน้ีตอ งเปนทเี่ กบ็ ท่สี ามารถรองรบั การประมวลผล หรอื การคํานวณไดอ ยา งพอเพยี งดงั นั้นในการเขยี นโปรแกรม เราจงึ ตองใชต ัวแปรเปน ท่เี กบ็ ขอ มูลตา ง ๆ ท่เี ราจะตอ งใชในการประมวลผลตวั แปรท่วี า น้ีเปนสญั ลกั ษณแทนหนว ยความจํา (memory) ทอ่ี ยใู นเครอื่ ง และ compiler จะเปน ผกู าํ หนดวาอยูทใ่ี ด มขี นาดเทาใด (address เริ่มตน และ offset) ทเี่ กบ็ ขอมลู น้ีจะเกบ็ ขอมลู ไดเพียงชนดิ ทีเ่ ราไดกาํ หนดไว เพยี งชนิดเดยี วเทานนั้ ขอ มลู ถกู แบง ออกตามชนดิ ของขอ มลู หลกั ๆ คือ ขอ มูลทีเ่ ปนตวั เลขและ ขอมลู ท่ีไมใ ชตวั เลข แตจ ะแบง ยอย ๆ ลงไปอีก เชน ถา เรากาํ หนดใหต ัวแปรตวั ใดตัวหน่งึ เกบ็ ขอมลูชนิดทีเ่ ปนตวั เลขในแบบของ integer เรากไ็ มส ามารถทจ่ี ะนาํ เอาขอ มูลทเี่ ปนตวั เลขในรูปแบบอนื่ เชนdouble หรือ float มาเก็บไวใ นตัวแปรน้ีได เนอื่ งจากวา ขอมูลที่ตวั แปรเก็บไดน ัน้ มขี นาดตายตัว ตามการออกแบบของภาษา ดงั น้ัน การนําเอาขอมูลชนิดอน่ื มาใสไ วในตัวแปรนจ้ี ะถกู ตรวจสอบโดย compiler และcompiler จะฟอ งไปยังผูเขยี นโปรแกรมทันทีการประกาศตวั แปรนนั้ ผูเ ขียนโปรแกรมจะใชส ัญลักษณใ ด ๆ ก็ไดท ี่ Java ยอมใหใช ซ่ึงตองอยใู นกฎเกณฑ ตอ ไปน้ี1. ตอ งข้ึนตนดว ยตัวอกั ษร (letter) หรือ เคร่ืองหมาย _ (underscore) หรือ เคร่อื งหมาย $ (dollar sign)2. เครอ่ื งหมายอ่นื ๆ ท่ีตามมาเปน ไดท้งั ตวั อกั ษร ตวั เลข และ สัญลกั ษณอ ่ืน ๆ ทไี่ มไดถูกใชโ ดย Java (เชน operator ตาง ๆ ที่ Java ใชดังตวั อยางของการ + (บวก) – (ลบ) * (คณู ) / (หาร) เปนตน)ตวั อยางของตัวแปรทถ่ี ูกตอ งtaxRatepricePerUnit

บทท่ี 2 ขอ มูล ตวั แปร และ การประมวลผล 14เรม่ิ ตนกับ Java_timeInSecond$systemClockunit897เนอ่ื งจากวา Java ไดออกแบบใหผ ใู ชส ามารถท่ีจะกาํ หนดตัวแปรใหเ ปน Unicode1 เพอื่ เปดโอกาสใหการออกแบบตัวแปรเปน ไปไดใ นภาษาน้ัน ๆ ของ ผเู ขยี นโปรแกรม เราจงึ สามารถทจี่ ะใชต ัวแปรทีเ่ ปนภาษาไทยได สงิ่ ทเี่ ราตองคาํ นึงถึงกค็ ือ text editor ท่เี ราใชใ นการเขียน code ตองยอมใหเราใชภาษาไทยดว ย ในบทนแี้ ละบทอืน่ ๆ ของตําราน้จี ะใชต ัวแปรท่เี ปนภาษาองั กฤษเทา น้นั เพอื่ ใหง ายตอ การเขยี น และการทาํ ความเขาใจในเนื้อหาไดรวดเร็วข้นึโดยทั่วไปเราจะเรียกตวั แปรทไี่ ดกําหนดใหเ ก็บขอ มูลชนิดใด ชนิดหน่งึ วา variable หรอื identifier และidentifier ทวี่ าน้ี มคี วามยาวเทา ไรก็ได (จาํ นวนของตัวอกั ษร) แตกต็ องอยูภ ายใตข อ กําหนดทไ่ี ดกลาวมาแลว พรอ มกันนี้ ตวั แปรทส่ี รา งขึ้นจะตองไมใ ช keyword หรอื reserved word ที่ Java ไดสรา งขน้ึ ไวใชงาน ดงั ทแ่ี สดงในตาราง 2.1ตารางที่ 2.1 keywordabstract const finally int public this float interface return throwsboolean continue for long short throws goto native static transientbreak default if new strictfp try implements package super voidbyte do import private switch volatile instanceof protected synchronized whilecase doublecatch elsechar extendsclass finalชนดิ ของขอ มลู (datatype)ในการประกาศตวั แปรทกุ ครัง้ เราจะตอ งบอกชนิดของขอ มลู ใหก บั ตวั แปรนนั้ ดวย ซึ่งการประกาศตัวแปรนน้ั ตอ งเร่ิมตนดวย ชนิดของขอ มูล และตามดว ย ชื่อของตวั แปร ตามรปู แบบทก่ี ําหนดดงั นี้datatype identifierโดยท่ี datatype คือชนดิ ของขอ มูลที่ ตวั แปรสามารถเกบ็ ได และในภาษา Java datatype เปน ไดท ั้งขอมูลท่เี รยี กวา primitive datatype และขอมลู ทเ่ี ปน reference (เราจะพดู ถงึ reference ในบทอ่ืน)Java กําหนดใหม ี primitive datatype จํานวนทัง้ ส้ิน 8 ชนดิ ดงั ทแ่ี สดงใหเ หน็ ในตารางท่ี 2.2ตาราง 2.2 primitive datatypedatatype คาํ อธบิ าย ขนาด (bit) 8 มีคาเปน true หรือ falseboolean คา ทางตรรกะ 8 16byte ตัวเลขทไ่ี มมจี ดุ ทศนิยม 32 64short ตัวเลขที่ไมมจี ดุ ทศนิยม 32 64int ตัวเลขทไ่ี มม จี ดุ ทศนยิ ม 16long ตวั เลขท่ีไมมจี ดุ ทศนยิ มfloat ตวั เลขทม่ี จี ดุ ทศนิยมdouble ตัวเลขที่มจี ุดทศนยิ มchar ตวั อักษรขนาดของ datatype จะเปน ตวั กาํ หนดคาที่เราสามารถเกบ็ ไดใ นตวั แปรท่ีไดป ระกาศในโปรแกรม ย่งิจาํ นวนของ bit มากเทาไรเรากส็ ามารถเก็บคา สงู ๆ ได ตารางที่ 2.3 แสดงคา ตา ง ๆ ทส่ี ามารถเกบ็ ไดใ นdatatype ชนดิ ตา ง ๆ1 มคี วามจุ 2 byte เพือ่ รองรบั ภาษาทใี่ ชก ันในประเทศตาง ๆ (เดมิ ใช ASCII ซง่ึ มคี วามจเุ พยี ง 1 byte) ภาควิชาคอมพิวเตอรธรุ กจิ วทิ ยาลัยฟารอ สี เทอรน

บทที่ 2 ขอมลู ตวั แปร และ การประมวลผล 15เรม่ิ ตนกบั Javaตาราง 2.3 คา ที่เกบ็ ไดใน primitive datatype ตา ง ๆdatatype คาตาํ่ สุด คา สงู สดุ 127byte -128 32767 2147483647short -32768 9223372036854775807 3.4 x 1038int -2147483648 1.7 x 10308long -9223372036854775808 -3.4 x 1038float -1.7 x 10308doubleตวั อยา งการประกาศตวั แปรint numberOfBikes;float taxRate;double interests, PI;boolean yesOrNo;char response;โดยทวั่ ไปนกั พฒั นาโปรแกรมมักจะใช ตวั อกั ษรตวั เลก็ เปนตวั เริ่มตนของตัวแปร และจะเปล่ียนเปน อักษรตัวใหญเมือ่ คํานั้น ๆ ส้นิ สดุ ลง เชน การประกาศตัวแปรที่เห็นดา นบนนี้ อีกวิธหี นึง่ ท่ีหลาย ๆ คนชอบใช คือการใชเ คร่อื งหมาย _ (underscore) เปน ตัวแบงคาํ เชนint number_of_bikes;float tax_rate;double cum_gpa;boolean yes_or_no;ทั้งนีแ้ ละท้งั นน้ั การประกาศตัวแปรทง้ั สองวธิ ที าํ ใหการอา นตวั แปรทําไดงา ยขนึ้ แตส ิ่งสําคญั ทเ่ี ราจาํ เปนจะตองคาํ นงึ ถึงในการประกาศตัวแปรกค็ ือ การเลอื กใชคาํ ทส่ี อื่ ถงึ ความหมายของขอมลู ท่ีตวั แปรน้นั ๆรองรบั หรอื เกบ็ อยู เชน ถาเราตอ งการเก็บขอ มลู ที่เปนเกรดทเี่ ปน ตัวอักษร เรากค็ วรใช ตัวแปรทส่ี ่อื ถึงเกรดท่เี ปนตวั อกั ษร เชน คาํ วา letterGrade และถา เราตองการเก็บเกรดท่ีเปน คาเฉลย่ี เรากค็ วรใช ตวั แปรเชน gpa หรอื cumulativeGPA เปนตนการกาํ หนดคา ใหก บั ตัวแปร (Assignment)การกําหนดคา ใหกับตวั แปรนนั้ ทําไดด วยการใชเคร่อื งหมาย = (เรยี กกันวา assignment operator) ซงึ่ มีความหมายวา \"ใหนาํ คา ทางขวามือ (rvalue) ของเครือ่ งหมาย = ไปเกบ็ ไวในตัวแปรท่ีอยทู างดา นซายมอื (lvalue) ของเครื่องหมาย =\" rvalue สามารถเปน ไดทัง้ คา คงที่ ตวั แปร หรอื ประโยคใด ๆ ที่สามารถหาคาได สวน lvalue เปน ไดเ ฉพาะตวั แปรเทา น้ัน เพราะจะตอ งเปนทีท่ ีเ่ กบ็ ขอมลู ได (physicalmemory) เชนnumberOfBikes = 2;area = PI * r * r;taxReturned = calculateTaxReturned(income);แตไมใ ชแ บบน้ี2 = numberOfBikes;PI * r * r = area;calculateTaxReturned(income) = taxReturned;ในการกําหนดคาใหก บั ตัวแปรนัน้ ถา เรามองในมมุ มองของที่มาของคาท่ีนาํ มาใสใหกบั ตัวแปร เราก็สามารถทจ่ี ะแบง การกําหนดคา ไดเ ปนสองแบบ คอื (1) การกําหนดคา ใหก บั ตัวแปรภายในตวั โปรแกรมและ (2) การกาํ หนดคาใหกับตัวแปรผา นทางสื่อการนําเขาขอมูลมาตรฐาน (standard I/O channel) เราจะมาทําความเขาใจการกําหนดคา ในแบบทห่ี นึง่ กนั กอ น เพราะเปน การกาํ หนดคาที่งา ยทส่ี ดุ ภาควิชาคอมพิวเตอรธุรกิจ วิทยาลัยฟารอ ีสเทอรน

บทท่ี 2 ขอมลู ตัวแปร และ การประมวลผล 16เร่มิ ตน กบั Javaการกาํ หนดคา ใหก บั ตวั แปรภายในโปรแกรมการกาํ หนดคา ใหก บั ตวั แปรนั้นสาํ คญั มาก เพราะโดยทว่ั ไปตัวแปรจะไมม ีคาใด ๆ เลยหลังจากการประกาศภาษาในการเขยี นโปรแกรมหลาย ๆ ภาษาบงั คบั ใหผ เู ขียนโปรแกรมกาํ หนดคา เบ้ืองตน กอ นที่จะใชต วัแปรนน้ั ๆ ซงึ่ ก็เปน สิง่ ทดี่ ี เพราะจะทําใหการเขียนโปรแกรมเปน ไปไดง า ย และสะดวกตอการตรวจสอบหากมขี อ ผิดพลาดเกิดขึ้น โปรแกรมตวั อยา งทเี่ หน็ นแ้ี สดงถงึ วิธกี ารประกาศตัวแปรพรอ มกับการกําหนดคาเบ้อื งตน ใหก ับตวั แปรเหลา นั้น/* * Variables.java - Variable decalration and initialization*/class Variables { public static void main(String[] args) { boolean booleanVar = true; byte byteVar = 0; short shortVar = 0; int intVar = 0; long longVar = 0L; float floatVar = 0.0F; double doubleVar = 0.0D; char charVar = 'A'; } System.out.println(\"boolean variable and its initial} value is \" + booleanVar); System.out.println(\"byte variable and its initial value is \" + byteVar); System.out.println(\"short variable and its initial value is \" + shortVar); System.out.println(\"int variable and its initial value is \" + intVar); System.out.println(\"long variable and its initial value is \" + longVar); System.out.println(\"float variable and its initial value is \" + floatVar); System.out.println(\"double variable and its initial value is \" + doubleVar); System.out.println(\"char variable and its initial value is \" + charVar);เรากาํ หนดคาทเ่ี ปน ศนู ยใ หกับตวั แปรทกุ ตวั ยกเวนตัวแปรทเี่ ปน boolean ซงึ่ เรากําหนดคาใหเ ปน trueเราบอกให Java รวู า คาที่กําหนดใหกับตวั แปรตา ง ๆ มีชนดิ เปนอะไรไดด วยการใสต ัวอักษรทีบ่ ง บอกชนิดน้นั ๆ ของตัวแปร เชน 0L 0.0F และ 0.0D ซง่ึ หมายถึง คาของศูนยทเี่ ปน long คา ของศนู ยทเ่ี ปน floatและ คา ของศนู ยที่เปน double ตามลาํ ดับ ทง้ั นเ้ี พอ่ื บอกให Java รูวาเราตองการใชค า ทเี่ ก็บชนิดนั้น ๆจรงิ ซงึ่ เราจาํ เปนที่จะตอ งทาํ เพยี งคาของตวั แปรทเ่ี ปน float และ double เทา น้ัน เพราะวา ตัวแปรทม่ี ีชนิดเปน float ถามีการกําหนดคา Java จะเหมาเอาวาเปน double เราจงึ ตองกาํ หนดคา ตามชนดิ ของตวัแปรจริง ๆ ทเ่ี ราตอ งการผลลัพธข องโปรแกรม Variables.javaboolean variable and its initial value is truebyte variable and its initial value is 0short variable and its initial value is 0int variable and its initial value is 0long variable and its initial value is 0 ภาควิชาคอมพิวเตอรธ ุรกจิ วทิ ยาลยั ฟารอีสเทอรน

บทท่ี 2 ขอ มลู ตัวแปร และ การประมวลผล 17เร่ิมตนกับ Javafloat variable and its initial value is 0.0double variable and its initial value is 0.0char variable and its initial value is Aเรามาดูขั้นตอนที่ Java เก็บขอ มลู ในตวั แปรกนั ดกี วา (หากจะบอกวาภาษาอ่ืน ๆ ก็เก็บแบบนีก้ ค็ งจะไมผ ดินกั ) เราจะใชต วั แปรจากโปรแกรมตวั อยา งขางบน จากประโยคของการประกาศและกาํ หนดคาlong longVar = 0L;ประโยคท่เี ห็นดา นบนน้ีสามารถทีจ่ ะเขยี นไดอ ีกแบบหนึง่ คือlong longVar;longVar = 0L;ประโยค long longVar; นนั้ เปน การประกาศตวั แปรช่ือ longVar ทม่ี ชี นดิ เปน long สว นประโยค longVar= 0L; นน้ั เปน การกําหนดคา 0 ใหก ับตัวแปร longVar (ภาพท่ี 2.1 แสดงถึงขั้นตอนในการสรางตวั แปรและการกาํ หนดคาใหก ับตัวแปรของ Java) การประกาศพรอ มกับกาํ หนดคา ใหก บั ตวั แปรในประโยคเดียวกัน ชว ยใหการเขียน code เม่อื มองดแู ลวสวยและกะทัดรัดขนึ้ ทั้งนกี้ ็คงจะขึ้นอยกู บั ตวั ผอู า นเองวา มีความคดิ เห็นอยา งไร สําหรบั ตวั ผเู ขียนเองคดิ วาถา เปนการประกาศทม่ี ตี วั แปรไมกี่ตัวในบรรทดั นนั้ ก็คงมองดแู ลว สวยดี แตถ า มีมากเกนิ ไปกค็ งจะไมเขา ทาเทาไรนัก ตวั อยา งเชนdouble price = 0.0D, tax = 0.7D, returned = 0.0D, interests = 0.0D,principal = 10000.0D;โปรแกรมเมอรค วรจะแยกการประกาศทเ่ี หน็ ดา นบนนใี้ หอยคู นละบรรทดั เพอ่ื ใหงายตอ การอา น และเปล่ียนแปลง หากมีการเปลย่ี นแปลงเกิดข้นึ ในโปรแกรม long longVar; longVar = 0L; ??? 0ประกาศตัวแปรชนิด long ช่ือวา หลังจากกําหนดคา 0 ใหกบัlongVar ซึง่ Java จะจอง longVar แลวหนวยความจาํ ณหนวยความจําใหแตไมม คี าใด ๆ ตําแหนงน้ันก็จะมคี า ตามท่ีณ หนวยความจําน้ัน กําหนดให คอื 0ภาพท่ี 2.1 การกําหนดคาใหกับตัวแปรในการกาํ หนดคาใหกบั ตวั แปรนนั้ เราไมจ ําเปนท่ีจะตอ งกําหนดคา ของตัวแปรตา ง ๆ ใหเ ปนศูนย เราสามารถที่จะกาํ หนดคา อะไร กไ็ ดใ หกับตวั แปรเหลานี้ ทัง้ นข้ี น้ึ อยกู ับการใชง านของตวั แปรนน้ั ๆ หลาย ๆครงั้ ท่เี ราตองตดั สินใจวาควรจะใชต วั แปรชนดิ ใดดี ในกรณีทขี่ อมลู เปนชนิดที่อยูในหมวดเดยี วกัน เชนขอมูลเปนเลขทไี่ มม จี ดุ ทศนยิ ม หรือ ขอมลู เปนเลขที่มจี ดุ ทศนยิ ม ซ่ึงถา เหตุการณเหลา น้เี กิดขน้ึ เราก็จาํ เปน ทจี่ ะตอ งคิดถึงคา ความเปน ไปไดของขอมลู วา อยใู น range เทา ใด เชน ถาเราตอ งการใชต วั แปรรองรบั ขอมลู ทีเ่ ปน เลขท่ีไมม จี ดุ ทศนยิ มทีม่ ีขนาดไมเกนิ 127 เราก็ควรทจ่ี ะประกาศตวั แปรดว ยการใชbyte แทนการใช int เปนตนเราสามารถทจ่ี ะประกาศตวั แปรพรอ มกับการกาํ หนดคา ใหก ับตวั แปร หลาย ๆ ตวั ในหนึ่งประโยค เชนint length = 2, height = 8, width = 4;double angles = 30.5, distance = 24.50; ภาควิชาคอมพิวเตอรธุรกิจ วิทยาลยั ฟารอสี เทอรน

บทท่ี 2 ขอ มูล ตวั แปร และ การประมวลผล 18เรมิ่ ตนกับ Javaการประกาศตวั แปรในรูปแบบนีต้ อ งใชเครอื่ งหมาย , (comma) เปน ตัวแบงตัวแปรออกจากกัน และตวั แปรเหลานั้นจะมชี นดิ เปนชนดิ เดยี วกนั ตลอด เราไมส ามารถประกาศตัวแปรตางชนิดกนั ไดด วยวธิ ีการประกาศแบบน้ี เชนint cats = 90, float tax = 0.50; // ERROR – mixed-type declaration // and initializationการประกาศตัวแปรไมจ ําเปน ตอ งกาํ หนดคาใหท ันที แตสามารถทีจ่ ะกําหนดไดภายหลงั เชนdouble radius;radius = 2.54;ลองมาดกู ารประกาศและกาํ หนดคาในรปู แบบอกี รปู แบบหนงึ่int one = 1, two = 2, three = one + two;Java ยอมใหมกี ารประกาศและกาํ หนดคา แบบนไ้ี ด เน่อื งจากวา ตัวแปร one และ two มีการกาํ หนดคาเรยี บรอ ยแลว ดังน้นั การประกาศและกาํ หนดคาใหกบั ตวั แปร three จงึ ทาํ ไดโดยไมม ปี ญ หาใด ๆ จากcompiler เลย ประโยค three = one + two; เปนประโยคทมี่ ีการประมวลผลของ one + two กอ นแลวจงึ นําคา ทไ่ี ดม าเกบ็ ไวท ตี่ ัวแปร three เราจะพดู ถึง ประโยค และ การประมวลผลที่เกิดขึน้ ในประโยคในโอกาสตอ ไปการใช final ในการกาํ หนดคา ใหก บั ตวั แปรหลาย ๆ ครงั้ ท่ีเราตอ งการใชค า บางคา ตลอดอายุการทํางานของโปรแกรม เชน คาของ PI หรือ คา คงทท่ี ่ีจะไมม กี ารเปลยี่ นแปลงใด ๆ ในขณะใชง านในโปรแกรม Java มีคาํ สง่ั ท่ี user ไมสามารถท่นี าํ มาใชใ นการประกาศตวั แปรได (reserved word) แตเอาไวใชในงานนโี้ ดยเฉพาะ คือ คาํ วา finalถา เราข้ึนตนการประกาศตวั แปรดว ยคําวา final ตวั แปรนั้น ๆ จะไมส ามารถมคี า อนื่ ๆ ไดอีก ไมวาจะเปนการเปลีย่ นคา ภายในโปรแกรม หรือ การเปลี่ยนแปลงทีเ่ กิดจากการใสขอมลู ใหมผ านทาง keyboard ดังโปรแกรมตวั อยา งท่ีแสดงใหเหน็ นี้/* * Final.java - Use of final keyword*/class Final { public static void main(String[] args) { final double PI = 3.14; int radius = 2; double area = radius * radius * PI; System.out.println(\"Area of a circle is \" + area); }}หลงั จากท่ี compile และ run โปรแกรม ผลลัพธท่ไี ดค ือArea of a circle is 12.56ถาเราเปลย่ี นแปลงโปรแกรม Final.java ดว ยการกําหนดคา ใหก บั ตวั แปร PI ใหม ดงั ทีเ่ หน็ ในโปรแกรมFinalWithError.java นี้ compiler จะฟอ งดว ยขอ มลู ดงั ที่เหน็/* * FinalWithError.java - Changing the value of final keyword*/ ภาควิชาคอมพิวเตอรธ รุ กจิ วทิ ยาลยั ฟารอีสเทอรน

บทที่ 2 ขอมลู ตัวแปร และ การประมวลผล 19เรม่ิ ตนกบั Javaclass FinalWithError { public static void main(String[] args) { final double PI = 3.14; int radius = 2; double area = radius * radius * PI; System.out.println(\"Area of a circle is \" + area); PI = 3.142; area = radius * radius * PI; System.out.println(\"Area of a circle is \" + area); }}ผลของการ compileFinalWithError.java:14: cannot assign a value to final variable PI PI = 3.142; ^1 errorขออธบิ ายถงึ ขอ ความ error ที่ Java ฟองสกั นิดหนอ ย ถา ผูอานสงั เกต error ทเ่ี กดิ ขน้ึ จะเหน็ เลข 14 ถดัจากชอ่ื ของโปรแกรมทีไ่ ดรับการ compile ซ่งึ บง บอกถงึ เลขท่ีบรรทดั ที่ error นเ้ี กดิ ขึน้ รวมไปถงึ ตําแหนงท่ี error เกดิ ขน้ึ ซ่งึ เปน ตวั ชวยใหเรากลับเขาไปแกไขโปรแกรมของเราไดง ายยิ่งข้ึน (ไมต องเสยี เวลาคนหาบรรทดั ทเ่ี กดิ error)การใช final ทาํ ใหโปรแกรมมคี วามแมนยําและมน่ั คงมากยง่ิ ขึน้ ความพยายามท่จี ะเปล่ยี นคา เหลานีก้ ็ไมสามารถทาํ ได ทาํ ใหก ารออกแบบและพฒั นาโปรแกรมเปนไปไดดวยดี ลดขอ ผดิ พลาดทอ่ี าจเกิดขึ้นจากตวั โปรแกรมเมอรเองในบางครั้งการประกาศตวั แปรตอ งการใชคา ทสี่ ูงมาก ๆ หรือ คาทเี่ ล็กมาก ๆ เชน ระยะทางจากโลกไปยงัดวงอาทติ ย ซึ่งมคี า โดยประมาณเทา กบั 149, 600,000 กิโลเมตร (1.496 x 108) หรือ การกําหนดคา ของมวลของอเิ ลคตรอน (electron mass) ซ่ึงมีคา เลก็ มาก ขนาดของมวลโดยประมาณมคี าเทากบั0.0000000000000000000000000009 กรมั (9.0 x 10-28) เราก็สามารถทาํ ไดด วยการใชการประกาศในรปู แบบของการกาํ หนดคา ทางวทิ ยาศาสตร (scientific notation) เชนfinal double sunDistance = 1.496E8; // 1.496 x 108final float electronMass = 9.0E-28F; // 9.0 x 10-28การประกาศและกาํ หนดคาในรปู แบบน้ที าํ ใหก ารมองเห็น และ การเขียนหรอื การอา นทาํ ไดงา ยย่งิ ขึน้ ลองนกึ ถงึ การทเี่ ราตอ งเขยี นประโยคในการกาํ หนดคา ใหก ับ มวลของอิเลคตรอน ทไี่ ดก ลาวถึงขา งตน ซึง่ มีศูนยถ ึง 27 ตวั วานา รําคาญขนาดไหน (โปรแกรมเมอรส ว นใหญร เู รือ่ งนดี้ )ี ยง่ิ ถาเราเขยี น code เยอะ ๆการกาํ หนดคา ใหก บั ตัวแปรเหลา นด้ี ว ยการเขยี นทสี่ นั้ ท่ีสดุ ยอ มเปน การดีเสมอ (เขยี นโปรแกรมไดไ วข้ึน?)อายุ และ ขอบเขตการใชงาน (life-time and scope) ของตวั แปรหลงั จากที่มกี ารประกาศใชต ัวแปรใด ๆ ในโปรแกรม ตัวแปรเหลา น้ีจะมขี อบเขต หรอื อายกุ ารใชงานตามลกั ษณะการประกาศตัวแปรของผเู ขยี นโปรแกรมเอง โดยทวั่ ไปตัวแปรจะมอี ายกุ ารใชงานตามเนอ้ื ที่(block) ทต่ี วั แปรเหลานั้นปรากฏอยู ซ่ึงจะอยใู นเครื่องหมาย {} เชน โปรแกรมตัวอยางตอไปน้ี/* Scope.java - Showing scope of variables */class Scope { public static void main(String[] args) { int x = 5, y = 8; ภาควิชาคอมพิวเตอรธ รุ กจิ วิทยาลยั ฟารอ สี เทอรน

บทที่ 2 ขอ มูล ตวั แปร และ การประมวลผล 20เรมิ่ ตนกับ Java System.out.print(\"Value of x is \"); System.out.println(\" Value of y is \" + y); { int x = 45; //error x is already defined int w = 89; System.out.println(\"Value of x in brackets is \" + x); System.out.println(\"Value of y in brackets is \" + y); } //error w is out of scope System.out.println(\"Value of w is \" + w); }}เปนท่ีแนน อนอยแู ลว วา โปรแกรม Scope.java จะ compile ไมผ าน เนอ่ื งจากเหตุผลสองอยา งดังที่compiler ฟอง คอื (1) ตัวแปร int x ไดม ีการประกาศใน main() แลว และ (2) ตัวแปร int w ไมไ ดอ ยใู นscope ของมนั เอง ซ่ึงในทน่ี คี้ อื block ที่มกี ารประการ int x และ int wScope.java:13 x is already defined in main(java.lang.String[]) int x = 45; ^Scope.java:19: cannot resolve symbolsymbol : variable wlocation: class Scope System.out.println(\"Value of w is \" + w); ^2 errorsในภาษาอ่นื เชน C++ การประกาศตวั แปรใน block ใหมด วยตวั แปรทม่ี ีชอื่ ซํ้ากนั สามารถทําไดโ ดยไมมีเงือ่ นไขใด ๆ (ดังทเ่ี หน็ ในโปรแกรม Scope.java) แตตวั Java เองไมย อมใหม ีการประกาศตัวแปรซํ้าถงึ แมว าจะอยใู น block ใหมท ซ่ี อนกนั อยกู ็ตามลองมาดโู ปรแกรมตัวอยางอีกตวั หน่ึง/* Scope2.java - Showing scope of variables */class Scope2 { static int x = 8, y; public static void main(String[] args) { { int x; x = 5; y = x; System.out.println(\"Value of y is \" + y); } y = x; System.out.println(\"Value of y is \" + y); }}โปรแกรม Scope2.java หลงั จากท่ี compile ผา นแลวจะไดผ ลลพั ธด ังนี้Value of y is 5Value of y is 8จะเหน็ วา compiler ยอมใหผ า นท้งั นเี้ พราะตวั แปร x ใน block ดานในมีการประกาศและกาํ หนดคา อยางสมบรณู  และ ตวั แปร x ใน scope ดา นนอกมีการกําหนดใหเ ปน static ซง่ึ เปนตัวแปรท่ี Java เรยี กวาclass variable ดงั นั้นตวั แปรทง้ั สองจึงไมใ ชตวั แปรเดยี วกนั เพราะฉะน้ันการกาํ หนดคา ใหก บั ตวั แปร y ใน ภาควิชาคอมพิวเตอรธ รุ กิจ วทิ ยาลัยฟารอ ีสเทอรน

บทท่ี 2 ขอ มูล ตัวแปร และ การประมวลผล 21เร่มิ ตนกับ Javablock ดานในจะไดคา ของตวั แปร x ทอ่ี ยดู านใน และการกาํ หนดคา ใหกบั y อกี ครั้งดานนอกจงึ ไดค า ของclass variable ท่ชี ่อื วา xเรามาลองดโู ปรแกรมตัวอยางอกี โปรแกรมหนึ่ง/* Scope2v1.java - Showing scope of variables */class Scope2v1 { static int x = 8, y; public static void main(String[] args) { { //int x; x = 5; y = x; System.out.println(\"Value of y is \" + y); } y = x; System.out.println(\"Value of y is \" + y); }}โปรแกรม Scope2v1.java แสดงการใชต ัวแปร x ตวั เดยี วทไ่ี ดประกาศกอ น method main() ซ่ึงมคี า เปน8 ดงั นนั้ การเปลยี่ นคา ของ x ใน block ดา นในทาํ ใหค าของตวั แปร x เปนคาลาสดุ คือ 5 ผลลัพธของการrun โปรแกรมน้จี งึ ไดอยา งทค่ี าดหวงั ไว คอืValue of y is 5Value of y is 5ลองมาดอู กี ตวั อยางหนึง่/* Scope3.java - Showing scope of variables */class Scope3 { static int x; public static void main(String[] args) { int x = (x = 12) + 8; System.out.println(\"Value of local x is \" + x); }}ในโปรแกรม Scope3.java นี้เราประกาศตวั แปรสองตวั ท่ีมชี อื่ เหมือนกนั คือ x โดยทต่ี วั หน่ึงมี scope อยูในclass Scope3 และอีกตัวหน่งึ มี scope อยใู น method main() และเมอ่ื compile ผา นแลว ผลลพั ธท ไี่ ดคอืValue of local x is 20คําถามทีเ่ กดิ ขนึ้ คอื ตัวแปร x ตวั ใดที่ Java นาํ มาใชใ นการกาํ หนดคา ของประโยค int x = (x = 12) + 8;เพือ่ ใหเ ห็นวา Java ใชตวั แปร x ตวั ไหนเราจึงดดั แปลง code ใหมโดยกําหนดคา ใหกบั ตวั แปร x ท่ีอยูดา นนอกใหเปน 4 ดงั โปรแกรม Scope3v1.java ทเ่ี หน็ นี้/* Scope3v1.java - Showing scope of variables */class Scope3v1 { static int x = 4; public static void main(String[] args) { int x = x + 8; ภาควิชาคอมพิวเตอรธรุ กิจ วิทยาลยั ฟารอ ีสเทอรน

บทท่ี 2 ขอมลู ตวั แปร และ การประมวลผล 22เริ่มตน กบั Java System.out.println(\"Value of local x is \" + x); }}และเม่ือ compile เราจึงรูวา Java ใชต วั แปร x ท่อี ยใู น block ดานในเพราะวา compiler ฟองดว ย errorScope3v1.java:8 variable x might not have been initialized int x = x + 8; ^1 errorเพือ่ ใหก าร compile ผา นเราจึงแกไ ข code ใหมด งั ทีแ่ สดงใหเห็นในโปรแกรม Scope4.java/* Scope4.java - Showing scope of variables */class Scope4 { public static void main(String[] args) { int x = (x = 12) + 8; System.out.println(\"Value of local x is \" + x); }}โปรแกรม Scope4.java เปน โปรแกรมเดยี วกนั กับโปรแกรม Scope3.java เพยี งแตเราลบการประกาศตวัแปรทอ่ี ยูดา นนอกออก และเมอื่ compile และ run ผลลพั ธท ่ีไดก ค็ อื ผลลพั ธเ ดมิ ที่ไดจ ากโปรแกรมScope3.java แตถ า อยากจะใหแนใจวา Java ใชต วั แปรตัวไหนจรงิ ๆ ก็ลองเปล่ยี น code ใหเ ปน ดงั ทเ่ี หน็ในโปรแกรม Scope5.java (ถงึ ตอนนผี้ ูอานคงสามารถทายไดว า อะไรจะเกิดขึน้ ถา มกี าร compile)/* Scope5.java - Showing scope of variables */class Scope5 { public static void main(String[] args) { int x = x + 8; System.out.println(\"Value of local x is \" + x); }}compiler ก็จะฟองดวย errorScope5.java:7: variable x might not have been initialized int x = x + 8; ^1 errorซึ่งเปน error ท่เี หมอื นกันกบั error ทเ่ี กดิ ขน้ึ จากการ compile โปรแกรม Scope3v1.java (เพราะวา ตัวแปร x ยังไมม คี ากาํ หนดใด ๆ เลย) ลองมาดอู ีกตัวอยางหนงึ่/* Scope6.java - Showing scope of variables */class Scope6 { public static void main(String[] args) { int x = 12, y = x + 8; System.out.println(\"Value of local y is \" + y); }}ซึง่ ไดผลลัพธหลังจากการ compile และ run ดงั นี้ ภาควิชาคอมพิวเตอรธุรกจิ วิทยาลยั ฟารอีสเทอรน

บทที่ 2 ขอมลู ตวั แปร และ การประมวลผล 23เริม่ ตนกับ JavaValue of local y is 20การประกาศและกําหนดคา แบบน้ีสามารถทําไดเ พราะ x ไดร บั การกําหนดคา กอ นที่จะถูกนํามาใชใ นการประกาศและกําหนดคา ใหกบั ตวั แปร yการประกาศและกาํ หนดคา ใหก บั ตัวแปรใด ๆ นั้นจะตอ งคาํ นงึ ถึงการใช และขอบเขตของการใชเสมอ ทั้งนี้ในการกําหนดคา ใด ๆ ใหก บั ตวั แปรนัน้ ส่ิงทนี่ าํ มากาํ หนดคา นน้ั ในตวั ของมนั เองจะตอ งมคี า อยแู ลว หรอืสามารถที่จะทําการประมวลคา ไดก อ นที่จะนํามาใชใ นการกาํ หนดคา ใหกบั ตวั แปรอื่น ดังเชน ตัวอยางทีเ่ หน็กอ นหนาน้ีเราจะมาดเู รอ่ื งของ scope ในสถานะอื่น ๆ เชน scope ของ ตัวแปรที่เก่ียวขอ งกับ method, class และตัวแปรในสถานะอนื่ ๆ ทีอ่ ยใู นเนอ้ื หาทเ่ี ราจะไดพ ูดถึงในบทตอ ๆ ไปเม่อื เราไดพูดถึงเรอ่ื งนั้น ๆ แตจ ะขอบอกในท่นี ้วี า ตัวแปรถกู แบงออกเปน 7 แบบคือ1. class variable2. instance variable3. array component4. method parameter5. constructor parameter6. exception-handler parameter7. local variableแตเราไดพ ดู ไปเพียงสองแบบคอื แบบท่ี 1 (class variable) และแบบท่ี 7 (local variable)การสรา งประโยค (statement and expression)ในภาษา Java ประโยค (statement) จะตอ งจบดวยเครื่องหมาย ; (semicolon) เสมอดงั ตวั อยางทแ่ี สดงใหเห็นน้ีint priceOfBook = 125;float taxReturn;เราไมจําเปน จะตอ งเขยี นประโยคใหจ บภายในบรรทดั เดยี ว แตท ีส่ าํ คญั ตองมีเคร่ืองหมาย ; ปด ทายเสมอเชนint priceOfBook = 125 ;Java จะมองหาเคร่อื งหมาย ; เสมอโดยไมแ ยแสวา ประโยคนนั้ ๆ จะกนิ เนอ้ื ท่ีก่ีบรรทดั แตท ี่สาํ คญั กค็ ือการเขียนทท่ี าํ ใหอ านไดงาย ยอ มจะทําใหท ้งั เรา และผอู น่ื สามารถท่จี ะดู code ไดร วดเร็วยงิ่ ขึน้ ถาไมเช่อืลองดู code จากโปรแกรมนดี้ สู ิ/* Scope2v1.java - Showing scope of variables* @author faaxumsai*/class Scope2v1{static int x = 8, y;public static voidmain(String[] args) { {int x;x = 5;y = x;System.out.println(\"Value ofy is \" + y);}y = x; System.out.println(\"Value of y is \" + y);}}การเขยี น code ใหม ีรูปแบบทเี่ หมาะสม อานไดงาย จะทาํ ใหก ารพัฒนาโปรแกรมเปนไปไดด ว ยความรวดเรว็ และเปน ท่ียอมรบั ตามระบบสากล รูปแบบท่ีเหมาะสมน้นั คือมีการยอ หนา (indentation) เพอื่ ใหก ารอา นทําไดงา ย และมองดแู ลวสวยงาม ดงั โปรแกรมตวั อยา งหลาย ๆ ตวั ทแี่ สดงใหเห็นกอนหนานี้Expression หมายถึงประโยคในภาษา Java ทไี่ ดรับการยอมรบั วา อยใู นรปู แบบท่ีไดก าํ หนดไว เชนประโยคในเรื่องของการกาํ หนดคาใหก ับตวั แปร ประโยคทตี่ อ งมกี ารประมวลผลในรูปแบบตาง ๆ เชน การ ภาควิชาคอมพิวเตอรธ รุ กจิ วิทยาลยั ฟารอ ีสเทอรน

บทที่ 2 ขอ มลู ตัวแปร และ การประมวลผล 24เรม่ิ ตนกับ Javaประมวลผลทางดา นคณติ ศาสตร (mathematical evaluation) การประมวลผลทางดา นตรรกะ (relationalevaluation) เปนตนการประมวลผลทางดา นคณิตศาสตรนน้ั มี operator ท่ีใชอยดู ังน้ี คอื + (บวก), – (ลบ), * (คูณ), /(หาร) และ % (การหาเศษท่ีเหลอื จากการหารตวั เลขทีเ่ ปน integer) โปรแกรมตัวอยางตอ ไปนีแ้ สดงถึงการประมวลผลของขอ มูลดว ย operator ชนดิ ตา ง ๆ ทไ่ี ดกลา วถึง/* Operators.java - Shows mathematical operators */class Operators { public static void main(String[] args) { int i, j, k; //generate random number between 1 and 10 j = 1 + (int)(Math.random() * 10); k = 1 + (int)(Math.random() * 10); System.out.println(\"j = \" + j + \" and k = \" + k); //evaluate and display results of math operators i = j + k; System.out.println(\"j + k = \" + i); i = j - k; System.out.println(\"j - k = \" + i); i = j * k; System.out.println(\"j * k = \" + i); i = j / k; System.out.println(\"j / k = \" + i); i = j % k; System.out.println(\"j % k = \" + i); }}เนอ่ื งจากวา เราตองการทจ่ี ะแสดงถึงการสรางประโยคและการประมวลผลดว ยคาท่มี าจาก ขา งในโปรแกรมเอง และเราไดใ ชเคร่อื งมอื ในการสรางคาเหลา นใี้ หเ ราแบบอัตโนมตั ิ ซึง่ เคร่อื งมอื ท่วี า นี้กค็ ือ methodrandom() ทมี่ าจาก class Math (มอี ยใู น Java แลว) method random() จะสรางคา ระหวาง 0 – 0.9+พดู งาย ๆกค็ อื คาต่าํ สุดคือ 0 และคา สงู สดุ คอื คาทีใ่ กล 1 แตไ มเ ทา กับ 1 (คา n ใด ๆ ท่อี ยใู นเงอ่ื นไขน้ีÆ 0.0 <= n < 1.0) เมอ่ื ไดคา นแ้ี ลว เราคณู คานด้ี ว ย 10 แลว บวก 1 เราก็จะไดคา ระหวาง 1 – 10หลงั จากนั้นเราก็คาํ นวณหาคา i ดว ยการใช operator ตาง ๆ พรอมท้งั แสดงคาทห่ี าไดไปยงั หนาจอ และเมือ่ run โปรแกรมผลลัพธที่ไดคอืj = 5 and k = 2j+k=7j-k=3j * k = 10j/k=2j%k=1และเนอื่ งจากวา เราใช method random() เปน ตัวหาคา ดังน้ันการ run ในแตล ะครงั้ กจ็ ะไดผลลัพธท อี่ าจซํ้ากัน หรือแตกตางกันOperator ตวั อน่ื ๆ กเ็ หมือนกับการคํานวณ ทางดา นคณติ ศาสตรท ีเ่ ราคนุ เคยโดยทวั่ ไป ยกเวน % ซงึ่ เปนการหาเศษจากการหาร integerประโยคi = j % k;จะนาํ เอาคา ของตัวแปร k คือ 2 ไปหารคาของตวั แปร j ซ่งึ มคี าเปน 5 แลวเก็บเศษทีไ่ ดจากการหารไว(ซง่ึ ก็คือ 1) เมือ่ ไดแลว กน็ ําคา น้ีไปเกบ็ ไวในตัวแปร i ตอ ไปโปรแกรมตวั อยา งตอ ไปน้ีแสดงถงึ การกําหนดคาดวยขอมูลชนดิ int และ double ภาควิชาคอมพิวเตอรธ รุ กิจ วิทยาลยั ฟารอ ีสเทอรน

บทที่ 2 ขอมลู ตัวแปร และ การประมวลผล 25เริม่ ตนกับ Java/* Operators.java - Shows mathematical operators */import java.util.Random;class Operators { public static void main(String[] args) { //do the ints int i, j, k; //generate random number between 1 and 10 Random rand = new Random(); j = 1 + rand.nextInt(10); k = 1 + rand.nextInt(10); System.out.println(\"j = \" + j + \" and k = \" + k); //evaluate and display results of math operators i = j + k; System.out.println(\"j + k = \" + i); i = j - k; System.out.println(\"j - k = \" + i); i = j * k; System.out.println(\"j * k = \" + i); i = j / k; System.out.println(\"j / k = \" + i); i = j % k; System.out.println(\"j % k = \" + i); //do the doubles double v1, v2, v3; //generate random double between 1.0 and 10.0 (exclusive) v1 = 1.0 + rand.nextDouble() * 9; v2 = 1.0 + rand.nextDouble() * 9; System.out.println(\"v1 = \" + v1 + \" v2 = \" + v2); v3 = v1 + v2; System.out.println(\"v1 + v2 = \" + v3); v3 = v1 - v2; System.out.println(\"v1 - v2 = \" + v3); v3 = v1 * v2; System.out.println(\"v1 * v2 = \" + v3); v3 = v1 / v2; System.out.println(\"v1 / v2 = \" + v3); }}โปรแกรม Operators.java แสดงตัวอยางของการกาํ หนดคา และ การคาํ นวณดว ย operator อยา ง งา ย ๆทางดา นคณติ ศาสตร โดยเริ่มตน ดวยการกําหนดคา ใหกับตวั แปร i และ j ดว ยการสรางคา แบบสุม(random) จาก method nextInt(max value) ซึง่ method น้ีจะกาํ หนดคา ท่ีอยรู ะหวา ง 0 ถึง คาที่กําหนดใน max value แตไมร วมตัว max value ดวยซึ่งถา เราตอ งการที่จะสรา งคา ทีอ่ ยรู ะหวา ง 1 ถงึ 10เราก็ตองบวก 1 เขากบั คา ท่เี กิดจากการเรยี กใช method นีด้ ว ย ดงั ที่ไดกําหนดไวใ นโปรแกรมเราสามารถทจ่ี ะเขยี นประโยคท่ีมกี ารประมวลผลในรปู ของประโยคทม่ี ีหลายตวั แปรในประโยคเดยี วกนั ไดดงั ตวั อยา งน้ี/* Operators1.java - Shows mathematical operators */class Operators1 { public static void main(String[] args) { int a, b, c, d, e; b = 1 + (int)(Math.random() * 10); c = 1 + (int)(Math.random() * 10); d = 1 + (int)(Math.random() * 10); e = 1 + (int)(Math.random() * 10); System.out.print(\"b = \" + b + \" c = \" + c); System.out.println(\" d = \" + d + \" e = \" + e); a = b + c - d; System.out.println(\"Value of a is \" + a); a = b * c - d; System.out.println(\"Value of a is \" + a); ภาควิชาคอมพิวเตอรธรุ กจิ วิทยาลยั ฟารอ สี เทอรน

บทท่ี 2 ขอ มูล ตัวแปร และ การประมวลผล 26เริม่ ตนกบั Java a = b / c * d; System.out.println(\"Value of a is \" + a); }}ผลลพั ธท ไี่ ดจ ากการ run คอืb=8c=2d=6e=5Value of a is 4Value of a is 10Value of a is 24การประมวลผลเมือ่ มตี ัวแปรหลายตวั ในการประมวลผลของประโยค ลําดับขั้น (precedence) ของการประมวลผลมีความสําคญั ทันที ท้งั นก้ี ็เน่อื งมาจากรปู แบบของการประมวลผลตามชนั้ ของ operator ตาง ๆ มลี าํ ดบั การประมวลผลทไ่ี มเ ทา กัน (กอน หรอื หลัง) ซึง่ เปนไปตามลําดบั ขัน้ ของการประมวลผลตามกฎของการประมวลผลทางดา นคณิตศาสตร ดังตารางท่ี 2.4ตาราง 2.4 Operator Precedence การประมวลผลOperator ตามกลุม ซา ยไปขวา(), [], ., postfix ++, postfix -- ขวาไปซา ยunary +, unary –, prefix ++, prefix -- ซา ยไปขวา(datatype), new ซา ยไปขวา*, /, % ซายไปขวา+, - ซายไปขวา<<, >>, >>> ซายไปขวา<, <=, >, >=, instance of ซา ยไปขวา==, != ซายไปขวา& ซา ยไปขวา^ ซายไปขวา| ซา ยไปขวา&& ซายไปขวา|| ซา ยไปขวา?: ขวาไปซา ย=, +=, -=, *=, /=, %=, <<=, >>=, >>>=, &=, |=, ^=การประมวลผลขอมลู ท่เี ปน integerการประมวลผลขอ มูลทเ่ี ปน integer ท้งั หมดไมมคี วามสลบั ซับซอนอะไรเลย เปนการประมวลผลเหมือนกบั ทีเ่ ราเคยเรยี นมา ในวชิ าคณติ ศาสตรซ่ึงลําดับขัน้ ของการประมวลผลก็ขึ้นอยกู บั ชนิดของoperator ทใ่ี ชใ นการประมวลผลนั้น ๆ เชน การคณู และการหาร ทํากอน การบวกและการลบ statement50 * 2 – 45 / 5จะไดผ ลลพั ธค อื 91 ซงึ่ ไดมาจากการนําเอา 2 ไปคณู 50 กอนหลงั จากน้ันก็เอา 5 ไปหาร 45 เมอ่ื ไดแ ลวกน็ ําเอาผลลพั ธทีไ่ ดไปลบออกจากผลลพั ธข องการคูณ 50 กับ 2 ซงึ่ มีคาเทา กบั 100 – 9แตถา เราตอ งการทจ่ี ะใหก ารประมวลผลอยูในรูปแบบอน่ื ท่ีเราตองการเราก็ใชว งเลบ็ เปน ตวั กําหนด เชนถา เราตองการที่จะใหการลบเกดิ กอ น ในประโยคทเี่ ห็นกอนหนา น้เี รากเ็ ขยี นใหมเ ปน50 * (2 – 45) / 5ซง่ึ มีคาเทา เทยี มกบั ประโยค50 * -43 / 5 ภาควิชาคอมพิวเตอรธรุ กจิ วิทยาลัยฟารอ ีสเทอรน

บทที่ 2 ขอ มูล ตวั แปร และ การประมวลผล 27เร่มิ ตนกับ Javaและมคี า เทา กบั -430เนอ่ื งจากวาการประมวลผลขอมลู ทเ่ี ปน integer โดยเฉพาะการหารน้นั เราจะไมมเี ศษเหลือใหทาํ การหารตอไปเหมือนทเี่ ราเคยหารกนั มา เชน ถาเราเอา 4 ไปหาร 9 เราก็จะได 2.25 แตถา เปน การหารดวยinteger ใน Java แลว ผลลัพธท เี่ ราไดจ ากการหารน้จี ะเปน 2 เทา นัน้ เราจะไมไ ดเ ศษ เราจะไดแตส ว นลองดูตวั อยา งตอ ไปน้ี5/2=2125 / 4 = 313/9=015 / 15 = 1แตเราก็หาเศษไดด ว ยการใช operator % ดังทีไ่ ดแ สดงในโปรแกรมตัวอยา งกอนหนา น้ี หรือดังตวั อยา งการหาเศษตอไปน้ี5%2=1125 % 4 = 13%9=315 % 15 = 0โดยทว่ั ไปเทา ทพ่ี บเห็นและประสพมา ผูอานท่ใี หมต อการเขยี นโปรแกรม มกั จะสับสนในเรอื่ งของการหาเศษ หรือการหาสว นของขอมลู ท่เี ปน integer อยา งไรก็ตามเรื่องเหลา น้ีมักจะหายไปถาไดท ดลองทาํอยางสม่ําเสมอ สาํ หรบั Java นนั้ การหาเศษสามารถท่ีจะทาํ ไดกับขอ มลู ท่ีเปน double หรอื float ดวย แตในทน่ี ี้จะทิ้งไวใ หผ อู านไดท ดลองทาํ การตรวจสอบดเู อง (เนือ่ งจากวาผูเ ขยี นเองยังมองไมเ หน็ ประโยชนของการหาเศษจากขอมูลทีเ่ ปน double หรอื float เลย)ในการเขยี นโปรแกรมนนั้ เราเก็บขอมูลไวใ นตวั แปร ดังน้นั การประมวลผลก็ตอ งทาํ กบั ตวั แปรเหลา นัน้ เชนเราสามารถทจ่ี ะคํานวณหาคาของภาษีมลู คาเพม่ิ (vat) จากตวั แปร price และ rate ถา ตัวแปรท้ังสองไดร ับการกาํ หนดคาเรยี บรอ ยแลว เชนdouble price = 120.0, rate = 7.5;double vat = price * rate;ลองมาดูโปรแกรมตัวอยางการประมวลผลดว ยขอ มลู ท่ีเปน integer/* * Integer.java - Integers calculation */class Integer { public static void main(String[] args) { //declares and initialize three variables int studentNumber = 40; int teacherNumber = 30; int totalNumber = 0; totalNumber = studentNumber + teacherNumber; //display result System.out.print(studentNumber + \" students + \" + teacherNumber); System.out.println(\" teachers = \" + totalNumber + \" people\"); }} ภาควิชาคอมพิวเตอรธ รุ กจิ วิทยาลยั ฟารอ สี เทอรน

บทที่ 2 ขอมูล ตวั แปร และ การประมวลผล 28เริม่ ตน กับ Javaโปรแกรม Integer.java เปน การแสดงถึงการคํานวณหาคาของผลรวมของจาํ นวนนกั ศกึ ษา(studentNumber)และครู (teacherNumber) จากประโยคtotalNumber = studentNumber + teacherNumber;ซงึ่ ขน้ั ตอนของการประมวลผล อาจพูดไดค ราว ๆ คอื Java นาํ เอาคา ทเ่ี ก็บไวในตัวแปร studentNumberและคา ทเ่ี กบ็ ไวใ นตัวแปร teacherNumber มารวมกันและนาํ เอาผลลพั ธท ไ่ี ดไปเก็บไวในตวั แปรtotalNumber ผา นทางเคร่ืองหมาย = (assignment operator) ลองดูภาพที่ 2.2teacherNumberstudentNumber 40 + 30totalNumber 70ภาพที่ 2.2 การบวก integer สองตัวในการแสดงผลลัพธทไ่ี ดจ ากการประมวลผลไปยงั หนาจอนัน้ เราสง ผานทาง System.out.print() และSystem.out.println() ประโยคSystem.out.print(studentNumber + \" students + \" + teacherNumber);จะใหผ ลลัพธค อื คา ทเ่ี ก็บไวในตวั แปร studentNumber ตามดว ย string ทม่ี คี า เปน \"student +\" ตามดวยคาท่เี กบ็ ไวใ นตวั แปร teacherNumber ในบรรทดั เดยี วกนั หลงั จากนน้ั ประโยคSystem.out.println(\" teachers = \" + totalNumber + \" people\");กจ็ ะใหผ ลลพั ธ คอื string ท่ีมคี าเปน \" teachers = \" ตามดว ยคา ที่เกบ็ ไวใ นตัวแปร totalNumber ตามดว ย string ท่มี คี าเปน \" people\" ซึ่งเม่อื รวมแลว ท้งั หมดก็จะไดผ ลลัพธท แ่ี สดงไปยงั หนา จอดังน้ี40 students + 30 teachers = 70 peopleคาํ วา \"ตามดว ย\" จากคําอธบิ ายดา นบนน้ีเกดิ จากการประมวลผลของ Java กบั เคร่อื งหมาย + ในการใชประโยคของการแสดงผล (System.out) ขอ มลู ใด ๆ ท่ีอยใู นเคร่อื งหมาย \" \" จะถกู สงไปยงั หนาจอ แตถ าเปน ตวั แปรหรือประโยคทต่ี อ งมีการประมวลผลอีก Java จะทาํ การประมวลผลกอ นเพ่ือใหไดค า สุดทายท่ีสามารถจะสงออกไปหนา จอได เชนSystem.out.println(\"30 + 45 = \" + (30 + 45));ส่งิ ทถ่ี ูกสงออกไปกอนคือ \"30 + 45 = \" ตามดวยคาของการประมวลผลของประโยค (30 + 45) ซ่งึ ก็คอื75 ดังนัน้ ผลลพั ธทีส่ ง ไปยังหนาจอคือ30 + 45 = 75วงเลบ็ ในประโยคของการบวก 30 กบั 45 กม็ ีสว นสําคญั เพราะถา ไมม ี Java ก็จะแสดงผลเปน ภาควิชาคอมพิวเตอรธุรกิจ วทิ ยาลัยฟารอีสเทอรน

บทที่ 2 ขอมูล ตวั แปร และ การประมวลผล 29เรม่ิ ตน กับ Java30 + 45 = 3045การใสว งเล็บเปนการบอก Java ใหท าํ การคํานวณหาคาของประโยคนั้น ๆ ท้งั น้เี ฉพาะในประโยคทใ่ี ชSystem.out เทา นั้น สว นการประมวลผลทอ่ี น่ื ๆ กท็ าํ ตามเดิม เหตทุ ่ีเปน เชน นี้กเ็ พราะวา System.out จะนําคา นน้ั ๆ ทเี่ ปน อยูไปแสดงถา ไมมีการคาํ นวณใด ๆสมมตวิ า เราตองทาํ การบวกคาใดคา หนึ่งใหก ับตวั แปร เรากส็ ามารถทจ่ี ะสรา งประโยคไดเหมือนกบั ที่เราเคยทาํ มากอนหนา น้ี เชน total = total + value;ถาเราลองเขยี นภาพแทนประโยคดังกลา ว เรากอ็ าจเขยี นไดด งั นี้ value total total + valueภาพที่ 2.3 การเพ่ิมคา ใหก ับตัวแปรตัวเดิมประโยคทเ่ี ห็นดา นบนนี้สามารถท่ีจะเขียนอกี แบบได ดงั นคี้ อืtotal += value;เราใชเ ครอ่ื งหมาย += ในการสรา งประโยคของเรา แตไ ดผ ลลัพธเ ชนเดียวกันกับประโยคกอนหนา น้ี และลดเวลาในการเขียนลง (ถึงแมว าจะไมมากก็ตาม) เชนเดียวกบั การประมวลผลดวย operator ตัวอืน่ ๆ เราก็สามารถจะใชว ิธีเดยี วกนั นี้ได ดงั ท่ไี ดส รุปไวใ น ตาราง 2.5ตาราง 2.5 การใช operator ตา ง ๆ รวมกับการกาํ หนดคาประโยคตัวอยา ง ประโยคท่ไี ดผลลพั ธเหมอื นกันsum = sum + count; sum += count;sum = sum - count; sum -= count;sum = sum * count; sum *= count;sum = sum / count; sum /= count;sum = sum % count; sum %= count;การกาํ หนดคา แบบนีไ้ มจ าํ เปน ทจี่ ะตอ งทํากบั ตัวแปรเทานัน้ เราสามารถท่จี ะทาํ กับคา คงทอี่ นื่ ๆ ได เชนtotal += 4;sum += 1;ยงั มี operator ทีเ่ ราสามารถใชไดโ ดยไมต อ งเสยี เวลาในการเขียนมากมายนกั เชน การเพิ่ม หรือ ลดทลี ะหน่งึ คา ดังประโยคตวั อยางcount = count + 1;value -= 1; ภาควิชาคอมพิวเตอรธุรกจิ วทิ ยาลยั ฟารอ สี เทอรน

บทท่ี 2 ขอมลู ตวั แปร และ การประมวลผล 30เร่ิมตน กบั Javaท้ังสองประโยคทเ่ี หน็ ดานบนทาํ การเพิ่มคา และลดคาทลี ะหนง่ึ คา ตามลําดับ เราสามารถที่จะเขยี นใหมดว ยการใช operator ++ และ operator -- ไดดังน้ี คือcount++;value--;จะเหน็ วา ถาเราตองการเพิ่มคา เพยี งแคหนง่ึ คา เรากใ็ ชเครอ่ื งหมาย ++ ตามหลังตวั แปรน้ัน เชน เดยี วกนั ถาเราตอ งการลดคาลงหนงึ่ คา เรากใ็ ชเ ครอื่ งหมาย –- ตามหลงั ตวั แปรน้ัน เราเรยี กการเขยี นแบบน้ีวา การเขยี นแบบ postfix (postfix notation) ซง่ึ เปน การใช operator ตามหลังตวั แปร และ Java ยอมใหม ีการเพิ่มหรือลดคา ไดเพยี งแคห นง่ึ คาเทานนั้ ถา เราตอ งการเพ่มิ หรือลดคา มากกวา หน่งึ คา เราตองใชวธิ สี องวธิ ีท่ีไดแสดงการใชกอ นหนา นี้ เชน ถาตอ งการเพ่มิ ทีละสอง เรากเ็ ขียนเปนtotal += 2;และถา เราตอ งการลดทีละสาม เราก็เขียนเปนtotal -= 3;Java ยงั มี Operator อีกตวั หนงึ่ ท่เี ราสามารถเลือกใช ในการประมวลผลถาเราคาํ นงึ ถึงขัน้ ตอนของการประมวลผล วาควรจะทาํ อะไรกอน อะไรหลัง ดงั ประโยคตวั อยา งตอไปนี้int count = 8, value = 5;count = count + value++;ถา มองดเู ผนิ ๆ เรากอ็ าจบอกวา ประโยคนเ้ี ปนการบวกคา ของตัวแปร value เขา กับตวั แปร count พรอมกบัการเพม่ิ คา ใหกบั ตัวแปร value อกี หนึ่งคา แตเ รารูหรอื ไมว า อะไรไดรับการประมวลผลกอน count +value กอน หรือ value++ กอ น และผลลัพธท ี่ไดจากการบวกคอื อะไรจากประโยคดา นบน Java จะนาํ เอาคา ของ value มาบวกเขากบั คา ของ count กอ น หลงั จากนน้ั จึงเพิม่ คาใหก ับตัวแปร value อีหนงึ่ คา ดังนัน้ ถา เรา execute ประโยค count = count + value++ เราก็จะไดผลลัพธเ ปน 13 และคา ของ value หลังจากการบวกจะเปน 6 แตถ า เราเปล่ียนประโยคใหเปน ดังนี้count = count + ++value;เราจะไดผ ลลพั ธจากการบวกเปน 14 (ทาํ ไม)เนื่องจากวา เราใชเครอ่ื งหมาย ++ นาํ หนาตัวแปร ดงั น้ัน Java จงึ ทาํ การเพม่ิ คา ใหกบั ตวั แปร value กอนหลังจากนัน้ จึงนาํ คา ทไ่ี ดน ไ้ี ปบวกเขา กับคาของตัวแปร count ผลลัพธท่ไี ดจ ึงเปน 14 ดังทเี่ หน็ เราเรยี กการเขียนแบบนวี้ า การเขยี นแบบ prefix (prefix notation)ข้ึนอยูก ับตาํ แหนง ทใ่ี ช prefix หรอื postfix ในประโยค บางคร้ังการประมวลผลจาก Java อาจไดผลลัพธท่เี หมือนกัน เราจะกลบั มาพดู ถงึ กรณีดงั กลา วในเรอื่ งของการทาํ งานแบบวน หรือ loop (repetition)ลองมาดูตวั อยา งการใช prefix และ postfix กนั อกี สกั หนอยint count = 10, value = 5;count--;value++;value = ++count + ++value;ถาเรา execute ประโยค value = ++count + --value; เรากจ็ ะไดผ ลลัพธ คือ value มีคา เปน 17 เพราะกอนหนานน้ั count มคี าเปน 9 และ value มคี าเปน 6 (จาก count—และ value++) แตไ ดรับการเพิ่มใหอกี หน่งึ คา กอ นการบวกในประโยคสดุ ทา ย ภาควิชาคอมพิวเตอรธุรกจิ วิทยาลยั ฟารอสี เทอรน

บทที่ 2 ขอมูล ตวั แปร และ การประมวลผล 31เริ่มตน กับ Javaถาหากวา เราตอ งการให code ที่เขยี นนั้นอานไดง า ยข้นึ เรากอ็ าจใชว งเล็บเปน ตวั ชวยกไ็ ด เชนvalue = (++count) + (++value);หรอื อาจเขยี นใหดแู ลว เวยี นหวั แบบนี้value = (count += 1) + (value += 1);หรือแบบนี้value = (count = count + 1) + (value = value + 1);สว นประโยคตอไปน้ีจะใหผ ลลพั ธตางจากตวั อยางดานบน (ทาํ ไม?)value = (count++) + (value++);ถา เราลองวเิ คราะหประโยคดานบนน้ี ดวยคา ของ count = 10 และคา ของ value = 5 และตามขอกําหนดการใชง านของ postfix ++ เราก็ตองสรปุ วา Java จะนาํ เอาคา ของ count ซง่ึ มีคา เทา กับ 10 บวกเขากบัคาของ value ซงึ่ มคี า เทา กบั 5 เมือ่ ไดแ ลว ก็นําผลลัพธทไี่ ดไ ปเกบ็ ไวในตวั แปร value ดังน้นั value จงึ มีคาเทา กับ 15 หลงั จากนน้ั กจ็ ะเพ่ิมคา ใหกับ count และ value อีกหนึ่งคา ซงึ่ ทาํ ให count มคี า เทา กับ 11และ value มีคาเทากบั 16แตเ มอื่ ทดลอง run ดูแลวผลลพั ธทีไ่ ดกลบั เปน value = 15 และ count = 11 ทําไม? เพื่อใหเ กิดความกระจางเรากท็ ดลองเขยี นประโยคตรวจสอบใหม คือvalue = 5;value = value++;และเม่อื run ดูเราก็ไดผลลพั ธเ ปน value = 5 ทําใหเ ราคอ นขา งจะมัน่ ใจวา Java ไมยอมให postfixoperator ++ เพม่ิ คา ใหกบั ตวั แปรเดมิ ทีไ่ ดร บั การกาํ หนดคา ในประโยคเดยี วกนั แตเพอื่ ใหแนใจขน้ึ อีกเรากท็ ดลอง run ดวยประโยคint sum = value++;เราไดผ ลลัพธเ ปน sum มีคา เทากบั 5 และ value มคี าเทา กบั 6 ดังนั้นเราจงึ ม่นั ใจวา postfix operator++ ไมย อมใหม กี ารเพิ่มคา ใหก บั ตัวแปรตวั เดยี วกันกับทใี่ ชในการกาํ หนดคา ในประโยคเดยี วกนั (ดงั ทไ่ี ดกลาวไว)การเขียนโปรแกรมทดี่ นี นั้ ไมควรเขยี นใหอานยาก เชนตัวอยา งของการใช ++ ท่ไี ดกลา วถงึ กอนหนานี้ ถาการเขียนน้นั ไดผ ลลัพธด ังทีเ่ ราตองการ ถึงแมวาจะเขยี นดว ยประโยคหลาย ๆ ประโยค กย็ งั ดกี วา ทเี่ ขยี นดวยจาํ นวนประโยคท่สี ้นั แตอ า นไดย ากกวา ตวั อยางตอ ไปน้เี ปนการใช operator ++ และ operator –ในรูปแบบตาง ๆ/* Increments.java - Shows increment operators */class Increments { public static void main(String[] args) { int value = 25, number = 25; System.out.println(\"value is \" + value); System.out.println(\"number is \" + number); --value; number++; System.out.println(\"value is \" + value); System.out.println(\"number is \" + number); value = value + --number; System.out.println(\"value is \" + value); ภาควิชาคอมพิวเตอรธ ุรกจิ วิทยาลัยฟารอ สี เทอรน

บทท่ี 2 ขอ มลู ตัวแปร และ การประมวลผล 32เรม่ิ ตนกบั Java System.out.println(\"number is \" + number); number = number - value++; System.out.println(\"value is \" + value); System.out.println(\"number is \" + number); number--; value++; System.out.println(\"value is \" + value); System.out.println(\"number is \" + number); value = --value; number = number++; System.out.println(\"value is \" + value); System.out.println(\"number is \" + number); }}ผลลัพธท ่ีไดจ ากการ runvalue is 25number is 25value is 24number is 26value is 49number is 25value is 50number is -24value is 51number is -25value is 50number is -25ผูอานควรทดสอบการใช operator increment ทง้ั สอง (++ และ --) ในประโยคสมมตติ าง ๆ เพ่ือใหเกิดความเขา ใจในการใช operator ท้งั สองไดด ยี ง่ิ ข้ึนการประมวลผลดวย integer ขนาดเลก็ (short และ byte)ในการประมวลผลดว ยขอมูลทเี่ ปน byte หรือ short นนั้ Java จะทําการประมวลผลเชน เดยี วกันกบั การประมวลผลดวยขอ มลู ทเี่ ปน int และผลลพั ธข องการประมวลผลขอ มลู ท่เี ปน short หรือ byte นั้นจะถกูเกบ็ อยูในรปู แบบของขอ มูลที่เปน int ดังตัวอยา งตอ ไปน้ี/* ByteShort.java - Shows byte and short integer calculation */class ByteShort { public static void main(String[] args) { short numScooters = 10; short numChoppers = 5; short total = 0; total = numScooters + numChoppers; System.out.println(\"Number of scooters is \" + numScooters); System.out.println(\"Number of choppers is \" + numChoppers); System.out.println(\"Total number of bikes is \" + total); }}เมอื่ ได compile แลว Java จะฟอ งวา มี error เกดิ ขึ้นByteShort.java:10: possible loss of precision ภาควิชาคอมพิวเตอรธ ุรกิจ วทิ ยาลยั ฟารอ สี เทอรน

บทที่ 2 ขอ มูล ตวั แปร และ การประมวลผล 33เริ่มตนกบั Javafound : intrequired: short total = numScooters + numChoppers; ^1 errorเน่ืองจากวา ผลลัพธข องการบวกจะตองเก็บเปน integer ท่ีมีขนาดเทากบั 64 bit แตตัวแปร total สามารถเกบ็ ขอ มลู ไดส งู สุดเทา กบั 16 bit ดงั นัน้ compiler จงึ ฟอ งทันที วธิ ีการแกไ ขก็อาจจะตอ งเปลีย่ นตวั แปรทั้งสามใหเปน int หรือไมกใ็ ชว ธิ ีการเปลีย่ นชนดิ ของขอมลู ทเ่ี รยี กวา castingการเปลยี่ นแปลงชนดิ ของขอ มูลดว ยการ castในการ cast นัน้ เราจําเปน ทจี่ ะตองคาํ นงึ ถงึ การจัดเก็บขอมลู วาเราจะตองใชข อ มูลชนดิ ไหน ในการจดั เก็บการประกาศตัวแปรก็ตอ งทําดว ยความระมดั ระวงั เน่อื งจากวาการ cast นั้นถาเรา cast ขอ มลู ทม่ี ีขนาดใหญไปสขู อมลู ที่มขี นาดเลก็ เราจะสูญเสียคา ความเปนจริงของขอมลู นน้ั เรามาทําการแกไ ขโปรแกรมByteShort.java เพ่อื ให Java ยอมใหการ compile เปนไปไดดว ยดีกันดีกวาวิธกี ารก็ไมยากเพียงแตเปล่ยี นประโยค total = numScooters + numChoppers; ใหเ ปนtotal = (short)(numScooters + numChoppers);เทานี้ Java กย็ อมใหเรา compile และเมื่อเราทดลอง run ดูกไ็ ดผ ลลพั ธด งั ท่คี าดไว คอืNumber of scooters is 10Number of choppers is 5Total number of bikes is 15ทีน้เี ราลองมาดกู นั วา ถาเราเปลยี่ นคาของ numScooters ใหเ ปน 32767 ดังท่เี ห็นดา นลา ง ผลลพั ธท ่ไี ดใ นการ compile และ run โปรแกรมของเราจะเปน อยา งไรshort numScooters = 32767; //คา สงู สุดที่เปนไปไดshort numChoppers = 5;ผลลพั ธท ่ีได คอืNumber of scooters is 32767Number of choppers is 5Total number of bikes is -32764จะเหน็ วาคา ของ total เปน -32764 ซึง่ เปน คา ทไ่ี มถ กู ตอง ซ่ึงถาบวกกนั แลว คา ท่ีไดต อ งเปน 32772ทําไม?เนอ่ื งจากวา ตวั แปรทง้ั สามตัวมชี นิดเปน short และสามารถเก็บขอมลู ไดสงู สดุ เพยี งแค 32767 ดงั นั้นการนาํ เอาผลรวมทมี่ ีคา เกนิ กวา คาสงู สดุ ที่เปน ไปไดม าเกบ็ ไวในตัวแปร total จึงไมส ามารถทาํ ไดแต Java ก็จะนาํ เอาคาอืน่ ทไี่ ดจากการประมวลผล (ทีถ่ ูกตองตามหลักการแตม คี า ความคลาดเคล่ือนของการประมวลผล – จาํ นวน bit ท่ีใชในการคาํ นวณหายไปครึง่ หน่งึ จาก 64 bit เหลอื เพียง 32 bit) มาใสไ วใ หผเู ขยี นโปรแกรมจะตอ งทาํ ความเขา ใจเก่ยี วกบั ชนิดของของมูล และการประมวลผลตามชนิดนั้น ๆ ของขอ มลู ถาหากวา หลีกเลย่ี งได ผเู ขยี นโปรแกรมก็ควรหลีกเลย่ี งการใช cast นอกเสยี จากวา จาํ เปนตองใชจริง ๆ เทา นั้นเรามาดกู าร cast อืน่ ๆ จากโปรแกรม Casting.java/* Casting.java - Changing type of data */class Casting { public static void main(String[] args) { byte byteVar = 127; ภาควิชาคอมพิวเตอรธรุ กจิ วิทยาลยั ฟารอีสเทอรน

บทที่ 2 ขอมลู ตวั แปร และ การประมวลผล 34เรมิ่ ตน กบั Java short shortVar = 32767; long longVar = 100000; int intVar = 300000; System.out.println(\"byteVar is \" + byteVar); System.out.println(\"shortVar is \" + shortVar); System.out.println(\"longVar is \" + longVar); System.out.println(\"intVar is \" + intVar); byteVar = (byte)shortVar; shortVar = (short)longVar; longVar = (int)intVar * (int)longVar; intVar = (short)intVar * (short)intVar; System.out.println(\"byteVar is \" + byteVar); System.out.println(\"shortVar is \" + shortVar); System.out.println(\"longVar is \" + longVar); System.out.println(\"intVar is \" + intVar); }}ผลลัพธท ี่ไดจ ากการ run คอืbyteVar is 127shortVar is 32767longVar is 100000intVar is 300000byteVar is -1shortVar is -31072longVar is -64771072intVar is 766182400ในการประมวลผลดว ยการใชขอ มูลทมี่ ชี นิดเปน long นน้ั (บงั คับใหเ ปน long ดว ยการใส L ดา นหลังคา ท่ีกําหนดใหกับตวั แปรนนั้ ๆ) ขอ มลู ชนิดอน่ื จะถกู เปลี่ยนใหเปน long กอนการประมวลผล เชนlong value = 125;long price = 200L;int total = 0;total = value * price;กอนการประมวลผลคา ของตวั แปร value จะถกู เปล่ยี นใหเ ปน long แลวจงึ นาํ มาคณู กบั ตัวแปร priceเพราะฉะน้ันในการประมวลผลขอมูลที่เปน integer นน้ั ขอ ควรคาํ นึงถึงกค็ ือ o การประมวลผลกบั ตัวแปรทป่ี ระกาศเปน long ทีม่ กี ารกาํ หนดคาดวยตัว L จะเปน การประมวลผล ดวยการใชจ าํ นวน bit เทา กบั 64 bit o การประมวลผลกบั ตวั แปรทปี่ ระกาศเปน int จะเปน การประมวลผลดวยการใชจ ํานวน bit เทากบั 32 bitปญ หาของการประมวลผลดว ยขอ มลู ท่มี ีชนิดเปน integer o ถา เราหารตัวแปรทีม่ ชี นดิ เปน int ดวย 0 เราไมส ามารถหาคาํ ตอบได เพราะฉะนนั้ Java จะทํา การฟองดว ย error แตเ รากส็ ามารถทจี่ ะตรวจสอบและแกไขไดด ว ยการใช exception ซ่งึ เปน วธิ ี ดกั จับ error ท่ี Java เออ้ื อํานวยใหผ ูเขยี นโปรแกรมไดท าํ การเอง เราจะพดู ถึง exception ใน โอกาสตอไป o การประมวลผลดวยคาที่เกินขดี จํากดั ของตวั แปรจะทําใหไดผ ลลพั ธท ่คี ลาดเคลอ่ื น ภาควิชาคอมพิวเตอรธ ุรกิจ วิทยาลัยฟารอสี เทอรน

บทท่ี 2 ขอมูล ตัวแปร และ การประมวลผล 35เริม่ ตนกบั Java o การประมวลผลดวย % ทม่ี คี า ของ 0 อยูทางขวาก็ทาํ ใหเ กิด error เหมือนกบั การหารดวย 0การประมวลผลดว ยตวั แปรทมี่ จี ุดทศนิยม (Floating Point Calculations)การประมวลผลของขอมูลที่เปน เลขทศนยิ มนน้ั กค็ ลา ยกนั กบั การประมวลผลดวยขอมลู ทีเ่ ปน integer การใช operator ตา ง ๆ กเ็ หมอื นกัน คอื + - * / ลองมาดูตวั อยา งกัน/* FloatingPoint.java - Calculating income */class FloatingPoint { public static void main(String[] args) { double weeklyPay = 1075 * 5; //1075 per day double extras = 1580; final double TAX_RATE = 8.5; //tax rate in percent //calculate tax and income double tax = (weeklyPay + extras) * TAX_RATE / 100; double totalIncome = (weeklyPay + extras) - tax; System.out.println(\"Tax = \" + tax); System.out.println(\"Total income = \" + totalIncome); }}โปรแกรม FloatingPoint.java เปนการคาํ นวณหาภาษี และรายไดต อหน่งึ อาทติ ย โดยเราสมมติใหร ายไดตอ วันเทากบั 1075 บาท และรายไดพ ิเศษเทา กบั 1580 บาท อดั ตราภาษีเทา กับ 8.5% เม่ือเรา executeโปรแกรมเราก็จะไดผ ลลพั ธด งั นี้Tax = 591.175Total income = 6363.825ในการคาํ นวณหาภาษีนน้ั เราจาํ เปน ท่จี ะตอ งใชวงเลบ็ ในประโยคdouble tax = (weeklyPay + extras) * TAX_RATE / 100;เนื่องจากวา เราตองการใหการบวกทํากอนการคณู และการหาร ถาไมเชนนนั้ แลวเราจะไมไ ดคารายไดโดยรวมทีเ่ ปนจริง ถา เราสังเกตใหด ีผลลัพธท ไี่ ดจะมเี ลขหลงั จุดทศนยิ มอยสู ามตัว เราทาํ ใหเปน สองตวัดังทใ่ี ชก ันอยทู ว่ั ไปไดมัย้ ? คาํ ตอบกค็ อื ได ดว ยการเพ่มิ code เขา ไปในโปรแกรมดังนี้/* FloatingPoint2.java - Calculating income with formatted output */import java.text.*; //for NumberFormatclass FloatingPoint2 { public static void main(String[] args) { double weeklyPay = 1075 * 5; //1075 per day double extras = 1580; final double TAX_RATE = 8.5; //tax rate in percent //set format output NumberFormat form = NumberFormat.getNumberInstance(); form.setMaximumFractionDigits(2); //calculate tax and income double tax = (weeklyPay + extras) * TAX_RATE / 100; double totalIncome = (weeklyPay + extras) - tax; System.out.println(\"Tax = \" + form.format(tax)); System.out.println(\"Total income = \" + form.format(totalIncome)); ภาควิชาคอมพิวเตอรธุรกิจ วิทยาลัยฟารอีสเทอรน

บทที่ 2 ขอมลู ตัวแปร และ การประมวลผล 36เรม่ิ ตนกบั Java }}เราเพิ่มประโยคNumberFormat form = NumberFormat.getNumberInstance();form.setMaximumFractionDigits(2);และเปลีย่ นการแสดงผลลัพธดว ยการใช form.format(tax) และ form.format(totalIncome) เพอ่ื ใหผลลพั ธท ่ีออกมาเปนTax = 591.18Total income = 6,363.82จะเห็นวา 591.175 จะถกู ปดใหเปน 591.18 และ 6363.825 ถกู ปด ใหเปน 6363.82 โดยท่ีคา ของtotalIncome มี , (comma) เปน ตวั บอกถึงจาํ นวนของหลักรอยดว ยในการใช method ทงั้ getNumbereInstance() และ setMaximumFractionDigits() นน้ั เราจาํ เปน ที่จะตอ ง import class NumberFormat เขาสโู ปรแกรมของเรา ถาไมแ ลว เราจะไมสามารถใช methodเหลานี้ไดยงั มี method อนื่ ใน class DecimalFormat ที่เราสามารถเรยี กใชใ นการ format ผลลพั ธท เี่ ปน จดุ ทศนยิ มได เชน ถา เราไมต องการ , (comma) เปน ตวั แบง หลกั เราจะทาํ อยา งไร? ลองดตู วั อยา งนดี้ ู/* FloatingPoint3.java - Calculating income with formatted output */import java.text.*; //for DecimalFormatclass FloatingPoint3 { public static void main(String[] args) { double weeklyPay = 1075 * 5; //1075 per day double extras = 1580; final double TAX_RATE = 8.5; //tax rate in percent //set format output DecimalFormat form = new DecimalFormat(\"#.00\"); //calculate tax and income double tax = (weeklyPay + extras) * TAX_RATE / 100; double totalIncome = (weeklyPay + extras) - tax; System.out.println(\"Tax = \" + form.format(tax)); System.out.println(\"Total income = \" + form.format(totalIncome)); }}ผลลัพธท ไ่ี ดค อืTax = 591.18Total income = 6363.82เราเพยี งแตเรยี กใช class DecimalFormat แทน NumberFormat และเปลย่ี นการกาํ หนด format ใหเปนDecimalFormat form = new DecimalFormat(\"#.00);เราก็จะไดผ ลลพั ธทีม่ ีเลขหลังจดุ ทศนิยมอยสู องตวั และไมมี , (comma) เปนตัวแบง หลกั ยงั มวี ิธกี ารกาํ หนดรูปแบบของการแสดงผลลัพธอกี มากมายแตเราก็คงจะพดู เพยี งเทานีก้ อ น ภาควิชาคอมพิวเตอรธรุ กิจ วทิ ยาลัยฟารอีสเทอรน

บทท่ี 2 ขอ มูล ตวั แปร และ การประมวลผล 37เรม่ิ ตนกับ Javaการประมวลผลขอ มลู ตา งชนดิ กนั (Mixed Type Calculations)ในการประมวลผลขอ มูลทม่ี ีความหลากหลายของชนิดในประโยคใด ๆ นัน้ โดยทัว่ ไป Java จะทาํ การเปลี่ยนชนดิ ของขอมลู ท่ีมขี นาดเล็กกวาใหเ ปน ขนาดทใี่ หญท ี่สดุ ในกลมุ ของขอ มลู นนั้ ๆ แตผ ูเขียนโปรแกรมจะตองใชค วามระมัดระวงั ในเรือ่ งของการจดั เก็บขอ มูลที่มขี นาดใหญไปไวในตวั แปรทมี่ ขี นาดเลก็ เชน เดยี วกบั ทีไ่ ดท าํ มากอนหนา นี้ในเรอ่ื งของการประมวลผลขอมูลทเ่ี ปน integer ลองมาดตู วั อยางกนั/* FloatingPoint4.java - Mixed-type calculations */import java.text.*; //for NumberFormatclass FloatingPoint4 {public static void main(String[] args) {double hourlyPay = 85.50; //85.50 per hourint hoursPerDay = 8; //8 hours per dayint numberOfDays = 5; //total days workedint extraHoursWorked = 15; //overtime hoursfinal double TAX_RATE = 8.5;//tax rate in percent//set format outputNumberFormat form = NumberFormat.getNumberInstance();form.setMaximumFractionDigits(2);//calculate weekly paydouble weeklyPay = hourlyPay * hoursPerDay * numberOfDays;//calculate extra pay: one and a half time of//regular hourly paydouble extras = extraHoursWorked * (hourlyPay + (hourlyPay / 2.0));//calculate taxdouble tax = (weeklyPay + extras) * TAX_RATE / 100;//calculate total incomedouble totalIncome = (weeklyPay + extras) - tax; System.out.println(\"Income before tax = \" + form.format((weeklyPay + extras))); System.out.println(\"Tax = \" + form.format(tax)); System.out.println(\"Income after tax = \" + form.format(totalIncome)); }}โปรแกรม FloatingPoint4.java ใชต ัวแปรทม่ี ชี นิดเปนทงั้ double และ integer ปนกันในการคํานวณหารายไดต อ หนึ่งอาทติ ย โดยกาํ หนดใหตวั แปร hoursPerDay numberOfDays และ extraHoursWorkedเปน integer สว นตวั แปร hourlyPay weeklyPay extras tax และ totalIncome เรากําหนดใหเปนdoubleการประมวลผลก็ไมยุงยากอะไร Java จะเปลย่ี นตัวแปรท่เี ปน int ใหเปน double กอนการประมวลผลเพราะฉะน้ันการจดั เก็บผลลพั ธก็ไมม คี าความคลาดเคลอื่ นใด ๆ เกิดขึ้น ดังผลลัพธท ี่แสดงนี้Income before tax = 5,343.75Tax = 454.22Income after tax = 4,889.53ขอ ควรจําในการประมวลผลขอ มูลตา งชนิดกนั (ในประโยคเดยี วกัน)o ถา มตี วั แปรใดเปน double ตวั แปรท่นี าํ มาประมวลผลดว ยจะถูกเปล่ยี นใหเปน double กอ นการ ประมวลผล ภาควิชาคอมพิวเตอรธ รุ กิจ วิทยาลัยฟารอ สี เทอรน

บทที่ 2 ขอ มลู ตวั แปร และ การประมวลผล 38เริม่ ตน กบั Java o ถา มตี วั แปรใดเปน float ตัวแปรทน่ี ํามาประมวลผลดว ยจะถกู เปล่ยี นใหเ ปน float กอ นการ ประมวลผล o ถามตี วั แปรใดเปน long ตัวแปรทนี่ าํ มาประมวลผลดวยจะถูกเปล่ยี นใหเ ปน long กอนการ ประมวลผลส่งิ ทสี่ ําคญั กค็ อื ขอมูลท่ีเลก็ กวาในประโยคจะถูกเปล่ยี นใหเ ปน ชนิดที่ใหญท ่ีสดุ ในประโยคนน้ั ๆ ซงึ่บางครัง้ ก็ไมใชก ารประมวลผลท่ีเราตองการ เชน ตัวอยา งของโปรแกรมตอ ไปนี้/* MixedTypes.java - Mixed-type calculations */import java.text.*;class MixedTypes { public static void main(String[] args) { double result = 0.0; int one = 1, two = 2; result = 1.5 + one / two; //formatting output DecimalFormat f = new DecimalFormat(\"#.00\"); System.out.println(\"Result is \" + f.format(result)); }}ผลลัพธท ่ีเราคาดหวังวา จะได คอื 2.0 แต Java กลบั ให 1.5 ซง่ึ เปน ผลลัพธท เี่ ราไมต อ งการ ถา สังเกตใหดีจะเหน็ วา ประโยคresult = 1.5 + one / two;นัน้ การหารจะเกดิ กอน และเนอ่ื งจากวาทง้ั one และ two เปน int ดังนนั้ ผลลพั ธข องการหารจึงมคี า เปนint และมคี าเปน 0 หลงั จากนนั้ Java กจ็ ะเปลี่ยน 0 ทไ่ี ดใ หเ ปน double แลว จึงทาํ การบวกเขา กับ 1.5เพ่ือใหผลลพั ธเ ปนที่เราตอ งการ ดงั นนั้ เราจึงตอ งทําการ cast ใหต วั แปร one เปน double เสยี กอน ดงั นี้/* MixedTypes.java - Mixed-type calculations */import java.text.*;class MixedTypes { public static void main(String[] args) { double result = 0.0; int one = 1, two = 2; result = 1.5 + (double)one / two; //formatting output DecimalFormat f = new DecimalFormat(\"#.00); System.out.println(\"Result is \" + f.format(result)); }}เราก็จะไดผ ลลพั ธเ ปน 2.0 ดังทเ่ี ราตอ งการอยางไรกต็ ามการ cast นัน้ ตองใชค วามระมัดระวงั เปนพเิ ศษ หากเราทาํ การ cast ขอ มลู ทใี่ หญกวาไปเก็บไวในตัวแปรที่เลก็ กวา ก็จะทาํ ใหเกิดความคลาดเคลือ่ นของขอ มูลได ดงั ทีไ่ ดพ ูดไวกอนหนา น้ีเรามาลองดตู ัวอยางอกี ตวั อยา งหนึง่/* FloatingPoint5.java - Mixed-type calculations */import java.text.*; //for NumberFormat ภาควิชาคอมพิวเตอรธ ุรกจิ วิทยาลยั ฟารอ ีสเทอรน

บทที่ 2 ขอมูล ตวั แปร และ การประมวลผล 39เร่ิมตนกับ Javaclass FloatingPoint5 {public static void main(String[] args) {double hourlyPay = 85.50D; //85.50 per hourint hoursPerDay = 8; //8 hours per dayfloat numberOfDays = 5F; //total days workedint extraHoursWorked = 15; //overtime hoursfinal double TAX_RATE = 8.5D;//tax rate in percent//set format outputNumberFormat form = NumberFormat.getNumberInstance();form.setMaximumFractionDigits(2);//calculate weekly paydouble weeklyPay = hourlyPay * hoursPerDay * numberOfDays;//calculate extra pay: one and a half time of regular hourly paydouble extras = extraHoursWorked * (hourlyPay + (hourlyPay / 2.0));//calculate taxdouble tax = (weeklyPay + extras) * TAX_RATE / 100;//calculate total incomedouble totalIncome = (weeklyPay + extras) - tax; System.out.println(\"Income before tax = \" + form.format((weeklyPay + extras))); System.out.println(\"Tax = \" + form.format(tax)); System.out.println(\"Income after tax = \" + form.format(totalIncome)); }}เราไดเปลีย่ นประโยค int numberOfDays = 5; ใหเปน float numberOfDays = 5F; และผลลพั ธท ไี่ ดก ็ยังคงถูกตอ งเหมอื นเดิมทง้ั นเ้ี พราะ Java จะเปลี่ยน float ใหเ ปน double เชนเดียวกนั กบั ทเ่ี ปล่ียน int ใหเปน double จากตวั อยางกอ นหนาน้ีการใช Mathematical Functions ตา ง ๆ ท่ี Java มีใหหลาย ๆ คร้งั ทก่ี ารเขยี นโปรแกรมตองการใช function ทเี่ กยี่ วของกบั การหาคา ทางคณติ ศาสตร เชน การหาคา ของ sine cosine tangent หรือ คาอ่นื ๆ ทีเ่ กยี่ วขอ งกบั การคํานวณทางคณติ ศาสตร Java ก็ไดทาํการออกแบบและจัดสรร function เหลา นี้ไวใ หผ ูใชไดเ รยี กใชอ ยา งเตม็ ท่ี เราจะมาทดลองเรยี กใชfunction ตา ง ๆ เหลา นี้ดูตัวอยางตอ ไปน้ีจะเปนการคาํ นวณหาคาของสมการ ทีเ่ รยี กวา Quadratic Equation Æ ax2 + bx + c =0 ซง่ึ หาไดจากการใชส ูตรx1 = − b + b2 − 4ac 2ax2 = − b − b2 − 4ac 2aซึ่ง mathematical function ทเ่ี ราตองใชก็คอื การหา square root และ Java ไดจัดเตรยี ม method ตัวน้ีไวใ หเ ราแลวกค็ ือ Math.sqrt() เรามาลองดโู ปรแกรมทห่ี าคา ของสมการตวั น้กี ันดู/* Quadratic.java - Calculating roots of function */ ภาควิชาคอมพิวเตอรธุรกิจ วทิ ยาลยั ฟารอสี เทอรน

บทที่ 2 ขอ มูล ตวั แปร และ การประมวลผล 40เรม่ิ ตนกบั Javaclass Quadratic { public static void main(String[] args) { double a, b, c; //4x2 + 20x + 16 = 0 a = 4; b = 20; c = 16; //calculate determimant double det = Math.sqrt(b * b - 4 * a * c); //calculate roots double x1 = (-b + det) / (2 * a); double x2 = (-b - det) / (2 * a); System.out.println(\"Root 1 = \" + x1); System.out.println(\"Root 2 = \" + x2); }}ผลลัพธท ี่ไดค อืRoot 1 = -1.0Root 2 = -4.0ในการเขยี นโปรแกรม Quadratic.java ในครง้ั น้นี ั้นเราจะยงั ไมสนใจในเร่อื งท่คี า ของ determinant จะเปน0 เน่อื งจากวา เราไมสามารถหาคา ของ square root ของ 0 ได เราจะใชตวั เลขทท่ี าํ ใหค า ของ b2 – 4acเปนบวกเทา น้นั เพือ่ หลกี เลย่ี งเหตุการณด ังกลา ว อีกอยางหนงึ่ กค็ อื เรายังไมไ ดเ รยี นเรื่องการใช ชุดคําส่งัในการตรวจสอบ (if –else) เราจะกลับมาดตู วั อยา งนี้อกี ครั้งหนงึ่ เมือ่ เราไดเรยี นเร่อื งของการใช ชดุ คําสัง่ในการตรวจสอบ ในทนี่ ี้เราสนใจแตเรอื่ งของการใช Math.sqrt() เทาน้ันเองเรามาลองใช Mathematical function อ่ืน ๆ ดูกนั ดกี วา/* MaxMin.java - Finding max and min */class MaxMin { public static void main(String[] args) { int num1 = 58, num2 = 97, num3 = 15; //finding maximum between num1, num2, and num3 int maxOfTwo = Math.max(num1, num2); int maxOfAll = Math.max(maxOfTwo, num3); //finding minimum between num1, num2, and num3 int minOfTwo = Math.min(num1, num2); int minOfAll = Math.min(minOfTwo, num3); System.out.println(\"Maximum number is \" + maxOfAll); System.out.println(\"Minimum number is \" + minOfAll); }}โปรแกรม MaxMin.java แสดงการเรียกใช method max() และ min() ในการเปรียบเทยี บและหาคา ท่ีมากทสี่ ดุ และคา ทน่ี อ ยทสี่ ดุ ของ integer 3 ตัว ตามลาํ ดับ และเนื่องจากวา method ทัง้ สองยอมรับparameter เพียงแคส องตวั เทา น้ัน เราจึงตองทําการหาคา สองครงั้ ครงั้ แรกระหวา ง integer 2 ตัวแรกและคร้ังที่สองระหวางคา ทห่ี าได กบั integer ที่เหลือ และเมอ่ื execute โปรแกรมเราก็จะไดผ ลลพั ธด ังที่เหน็ นี้Maximum number is 97 ภาควิชาคอมพิวเตอรธ ุรกิจ วทิ ยาลยั ฟารอีสเทอรน

บทที่ 2 ขอมูล ตัวแปร และ การประมวลผล 41เรม่ิ ตน กับ JavaMinimum number is 15โปรแกรมที่แสดงใหด ูตอ ไปนเ้ี ปนโปรแกรมที่เรยี กใช method ตา ง ๆ ทมี่ ีอยใู น class Math/* Maths.java - Other math functions */class Maths { public static void main(String[] args) { double angle = 0.7853982; //45 degrees angle in radians System.out.println(\"sin(45) is \" + Math.sin(angle)); System.out.println(\"cos(45) is \" + Math.cos(angle)); System.out.println(\"tan(45) is \" + Math.tan(angle)); //absolute value of -456 System.out.println(\"Absolute value of -456 is \" + Math.abs(-456)); //two to the fourth power System.out.println(\"2 to the 4th power is \" + Math.pow(2D, 4D)); //round to the nearest integer System.out.println(\"2.345267 rounded to \" + Math.round(2.345267)); //round to the nearest integer System.out.println(\"2.859 rounded to \" + Math.round(2.859)); //the remainder of 3.25 / 2.25 System.out.println(\"The remainder of 3.25 / 2.25 is \" + Math.IEEEremainder(3.25, 2.25)); //nearest integer of PI System.out.println(\"The nearest integer of PI is \" + Math.rint(Math.PI)); }}โปรแกรม Maths.java ใช method จาก class Math ทําการหาคา ของ sine cosine และ tangent ของมุม 45 ซง่ึ มคี าเทากบั 0.7853982 radians สาเหตทุ ต่ี องใชม ุมที่เปน radians กเ็ พราะวา method เหลาน้ีบงั คบั ใหม มุ ทร่ี บั เขา เปน parameter มชี นดิ เปน radiansหลังจากน้นั กท็ าํ การหาคา absolute ของ -456 คา 24 และคา การปดเศษในรูปแบบตา ง ๆ ผลลัพธท ไี่ ดจากการ run คอืsin(45) is 0.7071068070684596cos(45) is 0.7071067553046345tan(45) is 1.0000000732051062Absolute value of -456 is 4562 to the 4th power is 16.02.345267 rounded to 22.859 rounded to 3The remainder of 3.25 / 2.25 is 1.0The nearest integer of PI is 3.0โปรแกรมตวั อยา งการใช method toRadians() สาํ หรบั การเปลี่ยนมุมทเี่ ปน degrees ใหเ ปน radians ถาเราไมร วู ามุมท่เี ราเคยชนิ อยดู วยการวดั แบบ degrees มีคาเปน เทาไรในการวดั แบบ radians/* Maths1.java - Other math functions */import java.text.DecimalFormat;class Maths1 { ภาควิชาคอมพิวเตอรธ รุ กิจ วทิ ยาลยั ฟารอ สี เทอรน

บทที่ 2 ขอมูล ตวั แปร และ การประมวลผล 42เร่มิ ตน กับ Javapublic static void main(String[] args) { double angle = 45; //45 degrees angle double sin, cos, tan; //set format output DecimalFormat f = new DecimalFormat(\"0.00000\"); //calculate sin, cos, and tan sin = Math.sin(Math.toRadians(angle)); cos = Math.cos(Math.toRadians(angle)); tan = Math.tan(Math.toRadians(angle)); System.out.println(\"sin(\" + angle + \") = \" + f.format(sin)); System.out.println(\"cos(\" + angle + \") = \" + f.format(cos)); System.out.println(\"tan(\" + angle + \") = \" + f.format(tan)); }}โปรแกรมตัวอยา งอกี ตวั หน่ึงทใี่ ช math function ในการคาํ นวณหาคาของรศั มขี องวงกลม จากพนื้ ทีข่ องวงกลมทก่ี ําหนดให/* Radius.java - Other math functions */import java.text.DecimalFormat;class Radius { public static void main(String[] args) { double radius; double area = 850.0; int meters, centimeters; //calculate radius radius = Math.sqrt(area / Math.PI); //convert to meters and centimeters meters = (int)Math.floor(radius); centimeters = (int)Math.round(100.0 * (radius - meters)); System.out.print(\"Circle with area of \" + area + \" square meters \"); System.out.print(\"has a radius of \" + meters + \" meters and \"); System.out.println(centimeters + \" centimeters\"); }}เราใช floor() ในการหาคาของรศั มที เี่ ปน จํานวนเตม็ และใช round() ในการคาํ นวณหาคา ของcentimeters ทเ่ี หลอื จากการนาํ เอา meters ไปลบออกจาก radius ซง่ึ เมอ่ื run กจ็ ะไดผ ลลพั ธด งั นี้Circle with area of 850.0 square meters has a radius of 16 meters and45 centimetersยังมี method อีกหลายตวั ทผ่ี เู ขยี นโปรแกรมอาจตองใช ซงึ่ ไดสรุปไวใ นตารางที่ 2.6ตาราง 2.6 Mathematical Functions สําหรบั การหาคา ทางตรีโกณMethod Function Argument Result Type doublesin(arg) หาคา sine double (radians) double doublecos(arg) หาคา cosine double (radians)tan(arg) หาคา tangent double (radians) ภาควิชาคอมพิวเตอรธุรกิจ วทิ ยาลยั ฟารอีสเทอรน

บทท่ี 2 ขอมลู ตวั แปร และ การประมวลผล 43เร่ิมตน กับ Javaasin(arg) หาคา arc sine double double (radiansacos(arg) หาคา arc cosine double ระหวา ง – π /2 และ π /2)atan(arg) หาคา arc tangent double double (radiansatan2(arg1, arg2) หาคา arc tangent of arg1 double ระหวา ง 0.0 และ และ arg2abs(arg) π)max(arg1, arg2) หาคา absolute ของ arg int long floatmin(arg1, arg2) double double (radiansceil(arg) หาคาสูงสุดระหวา ง arg1 int long floatfloor(arg) และ arg2 double ระหวา ง – π /2 และround(arg) หาคาตา่ํ สดุ ระหวา ง arg1 และ int long float π /2 ) arg2 double หาคาท่ีเลก็ ทสี่ ดุ ทใี่ หญกวา double double (radians หรอื เทา กบั arg หาคาท่ีใหญท ส่ี ดุ ที่นอ ยกวา double ระหวา ง – π และ หรอื เทากบั arg π) หาคา integer ทใ่ี กลเ คยี งกับ float double arg ทส่ี ุด เหมือนกันกับ Argumentrint(arg) หาคา integer ทใ่ี กลเ คยี งกับ double เหมือนกันกบั arg ทส่ี ดุ ArgumentIEEEremainder(arg1, double เหมอื นกันกับarg2) หาคา เศษที่เหลอื จากการหาร Argumentsqrt(arg) arg1 ดวย arg2 double doublepow(arg1, arg2) หาคา root ทสี่ องของ arg double doubleexp(arg) หาคา ของ arg1 ยกกาํ ลัง doublelog(arg) arg2 double ได int ถาrandom() หาคา e ยกกาํ ลัง arg ไมมี argument เปน float และ long ถา หาคา log ของ arg เปน double หาคา สมุ ทมี่ ากกวา 0.0 แต double นอยกวา 1.0 double double double double double doubleการใชขอ มูลทเี่ ปน Characterเราไดด ูการประกาศตวั แปรท่ีเปน character มากอนหนาน้ีเพียงตัวอยา งเดียว เพอื่ ใหเกิดความเขา ใจถงึการใชขอ มูลที่เปน character ใน Java เรามาลองดตู วั อยา งการใช character ในรูปแบบตา ง ๆ กนั อกี สกัหนอย/* Characters.java - Using character data */class Characters { public static void main(String[] args) { char H, e, l, o;H = 72; //ASCII for 'H'e = 101; //ASCII for 'e'l = 108; //ASCII for 'l'o = 111; //ASCII for 'o' ภาควิชาคอมพิวเตอรธ รุ กจิ วทิ ยาลยั ฟารอ สี เทอรน

บทที่ 2 ขอมูล ตวั แปร และ การประมวลผล 44เร่ิมตน กับ Java System.out.print(H); System.out.print(e); System.out.print(l); System.out.print(l); System.out.print(o); System.out.println(\" World\"); }}ผลลัพธจ ากการ run โปรแกรม Characters.java กค็ ือ Hello World ซึ่งตัวโปรแกรมเองใชรหสั ASCII ในการกําหนดคา ใหกับตัวแปร H e l และ o ซง่ึ เม่ือนําไปแสดงผลกจ็ ะไดคา ทต่ี วั แปรเหลา นัน้ เปน อยู เรามาลองดูการประมวลผลดว ยการใช character ดว ย operator งา ย ๆ ที่มีอยู/* Characters1.java - Using character data */class Characters1 { public static void main(String[] args) { char ch1 = 88, ch2 = 77; System.out.println(\"ch1 = \" + ch1); System.out.println(\"ch2 = \" + ch2); ch1 -= 23; //ASCII for 'A' ch2 += 6; //ASCII for 'S' System.out.println(\"ch1 = \" + ch1); System.out.println(\"ch2 = \" + ch2); }}โปรแกรมเรมิ่ ตน ดว ยการกําหนดคา ให ch1 และ ch2 มคี า เปน ตวั อักษร X และ M ตามลาํ ดับ และเม่อืแสดงผลของทง้ั สองตัวแปรแลว โปรแกรมก็เปลี่ยนคา ใหกับตวั แปร ch1 และ ch2 ดวยการลดคา ของ ch1ลงเปนจํานวนเทา กับ 23 และเพมิ่ คาใหกับตัวแปร ch2 อีก 6 เพอื่ ใหไ ดตวั อกั ษร A และ X และเม่ือexecute โปรแกรมเรากจ็ ะไดผ ลลัพธท ง้ั หมดเปนch1 = Xch2 = Mch1 = Ach2 = Sทนี ีเ้ รามาลองดกู ารใช Unicode ในการแสดงผลตวั อักษรตา ง ๆ/* Characters2.java - Using character data */class Characters2 { public static void main(String[] args) { char ch1 = '\u0058'; //unicode for 'X' char ch2 = '\u004D'; //unicode for 'M' char ch3 = '\u0041'; //unicode for 'A' char ch4 = '\u0053'; //unicode for 'S' System.out.println(\"ch1 = \" + ch1); System.out.println(\"ch2 = \" + ch2); System.out.println(\"ch3 = \" + ch3); System.out.println(\"ch4 = \" + ch4); } ภาควิชาคอมพิวเตอรธรุ กจิ วทิ ยาลัยฟารอีสเทอรน

บทท่ี 2 ขอมูล ตัวแปร และ การประมวลผล 45เร่ิมตนกบั Java}ซึง่ เมอื่ run แลว กจ็ ะไดผ ลลพั ธเ หมอื นกนั กับผลลัพธของโปรแกรม Characters1.javaเราสามารถทจ่ี ะใช Unicode ในการแสดงตวั อกั ษรในภาษาไทยได เชน เดยี วกันกับที่เราใช Unicode ในการแสดงตวั อักษรในภาษาอังกฤษ แตวาระบบของเราจะตอ งเออื้ ตอ การแสดงผลทเ่ี ปนตวั อกั ษรไทยดว ยไมเชน น้นั แลว ผลลัพธท ี่ไดก ็จะเปนตวั อักษรทอี่ านไมรูเรื่อง หรอื ไมก็แสดงผลเปน เครอ่ื งหมาย '?' ทุกตวัแตถา เราใช Unicode เพอ่ื การแสดงผลใน applet เรากจ็ ะไมเ จอปญหาใด ๆ เลยเพราะ Unicode ไดถ กูออกแบบมาเพือ่ แสดงผลบน applet อยแู ลวตารางที่ 2.7 แสดงถึงตวั อักษรทใี่ ชใ นการแสดงผลลัพธท ีไ่ มใ ชต วั อักษรธรรมดา หรือทภี่ าษาองั กฤษเรียกวา Character Escape Sequences ซึ่งเราสามารถนาํ มาใชในการจดั วางรูปแบบของผลลัพธท ี่เราตองการใหด ูแลว สวยงามขึน้ (อยา งหยาบ ๆ และ งาย ๆ)ตาราง 2.7 Character Escape SequenceEscape Sequence ความหมาย\ddd แสดงผลลพั ธเปน เลขฐานแปด (Octal)\uxxxx แสดงตวั อักษร Unicode (Hexadecimal)\' ตวั ' (Single quote)\\" ตวั \" (Double quote)\\ ตวั \ เอง\r กลบั ไปยงั จดุ เรม่ิ ตน ของบรรทดั (Carriage return)\n ขน้ึ บรรทัดใหม (New line หรือ Linefeed)\f เล่ือนไปหนาถดั ไป (Form feed)\t เลอ่ื นไปยงั ตําแหนงถัดไป (Tab)\b เลอ่ื นไปทางซา ยหนึ่งตัวอักษรการใชต วั แปรชนิด booleanเราไดเ ห็นการประกาศตวั แปรทเี่ ปน boolean มาเพียงนอ ยนดิ กอ นหนา น้ี ตอ ไปเราจะมาทาํ ความเขา ใจกับขอมลู ทีเ่ ปน boolean และการประมวลตวั แปรหรือประโยคทมี่ ีคาของการประมวลผลเปน boolean อกี สักเลก็ นอยกอนทเ่ี ราจะใชม นั ในโอกาสตอไป ผูเ ขียนหลายทา นเรยี ก operator เหลา นว้ี า Logical Operatorโดยทั่วไปเราสามารถประมวลผลขอมลู ทเ่ี ปน boolean ดว ย operator ตา ง ๆ ท่เี ห็นน้ี&& หรือทเ่ี รยี กวา Conditional AND|| หรือที่เรยี กวา Conditional OR& หรือท่เี รยี กวา Logical AND| หรือทเ่ี รยี กวา Logical OR! หรือทเ่ี รยี กวา Logical NOT&& และ || มีการประมวลผลในรูปแบบทห่ี นงั สือหลาย ๆ เลม ใหช ่อื วา Lazy หรือ Short Circuit ซง่ึ มีรูปแบบการประมวลผลทแี่ ตกตา งจาก & และ |operator && ตา งจาก & โดยที่ && นน้ั จะไมประมวลผล ประโยคหรือตวั แปรทตี่ ามหลงั ตวั มันเอง ถาประโยคหรือตัวแปรทอ่ี ยูกอนหนา มคี าเปน false เพราะวาคา ทเ่ี ปน false เมื่อนํามาประมวลผลกบั คา อนื่ ๆแลว จะได false เสมอoperator || ก็เชน เดยี วกันกบั && แตจ ะประมวลผลประโยคหรอื ตัวแปรทต่ี ามมาเม่ือประโยคแรกหรือตัวแปรตวั แรกมคี า เปน true เพราะวา ประโยคหรอื ตัวแปรท่มี คี า เปน true เมื่อนํามาประมวลกบั คา ใด ๆ กต็ ามจะไดค า true เสมอสวน operator & และ | จะประมวลผลประโยคและตวั แปรทง้ั สองเสมอ ภาควิชาคอมพิวเตอรธ ุรกิจ วทิ ยาลัยฟารอ สี เทอรน


Like this book? You can publish your book online for free in a few minutes!
Create your own flipbook