เร่มิ ตน กบั 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 & และ | จะประมวลผลประโยคและตวั แปรทง้ั สองเสมอ ภาควิชาคอมพิวเตอรธ ุรกิจ วทิ ยาลัยฟารอ สี เทอรน
Search
Read the Text Version
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
- 100
- 101
- 102
- 103
- 104
- 105
- 106
- 107
- 108
- 109
- 110
- 111
- 112
- 113
- 114
- 115
- 116
- 117
- 118
- 119
- 120
- 121
- 122
- 123
- 124
- 125
- 126
- 127
- 128
- 129
- 130
- 131
- 132
- 133
- 134
- 135
- 136
- 137
- 138
- 139
- 140
- 141
- 142
- 143
- 144
- 145
- 146
- 147
- 148
- 149
- 150
- 151
- 152
- 153
- 154
- 155
- 156
- 157
- 158
- 159
- 160
- 161
- 162
- 163
- 164
- 165
- 166
- 167
- 168
- 169
- 170
- 171
- 172
- 173
- 174
- 175
- 176
- 177
- 178
- 179
- 180
- 181
- 182
- 183
- 184
- 185
- 186
- 187
- 188
- 189
- 190
- 191
- 192
- 193
- 194
- 195
- 196
- 197
- 198
- 199
- 200
- 201
- 202
- 203
- 204
- 205
- 206
- 207
- 208
- 209
- 210
- 211
- 212
- 213
- 214
- 215
- 216
- 217
- 218
- 219
- 220
- 221
- 222
- 223
- 224
- 225
- 226
- 227
- 228
- 229
- 230
- 231
- 232
- 233
- 234
- 235
- 236
- 237
- 238
- 239
- 240
- 241
- 242
- 243
- 244
- 245
- 246