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

Home Explore Basic Java

Basic Java

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

Description: Basic Java

Search

Read the Text Version

ในบทน้ีเราจะมาดกู ารสรา งและใช array ซึ่งเปน โครงสรางอกี ตัวหน่ึงทท่ี ําใหเราสามารถเก็บขอมลู ที่เปนชนิดเดยี วกนั หลาย ๆ ตวั ไวใ นตวั แปรตวั เดยี ว รวมไปถึงการสรางและใช string ซ่ึงจะเปน การแนะนาํ ใหผอู านไดรจู กั กับ object ในภาษา Java แบบคราว ๆหลงั จากจบบทเรียนน้ีแลว ผอู า นจะไดท ราบถงึ o การประกาศและกาํ หนดคา ให array o การเขาหาขอมลู ในตาํ แหนง ตา ง ๆ ท่ีอยูใน array o การสราง array ทีใ่ ชเก็บ array o การสรา ง object ท่ีเปน string o การสรางและใช array ทเ่ี กบ็ object o การใชก ระบวนการตา ง ๆ กบั object ที่เปน stringการใช arrayArray เปน โครงสรา งชนิดหน่ึงที่ประกอบไปดว ยขอมูลชนดิ เดียวกนั ทอี่ าจมมี ากกวา หน่งึ ตัว การเขาหาขอ มลู แตล ะตวั ท่ีอยูใ น array จะตอ งทาํ ผา นทาง ชือ่ ของ array และ index ทม่ี คี าเปน integer (int)ประกอบกัน Java ไดก าํ หนดให index ตวั แรกสุดทเี่ กบ็ ขอมูลมคี าเปน 0 และจะเพิม่ ข้ึนทลี ะหนึ่งคา ไปเรื่อย ๆ จนกวาจะหมดขอ มูลทมี่ ีอยใู น array นั้น ๆ การประกาศตัวแปรทีเ่ ปน array ทาํ ไดดงั นี้datatype[] nameOfArray;เชนint[] listOfNumbers;double[] prices;char[] vowels;ในการประกาศ array น้นั เราจะตองกาํ หนดจาํ นวนของขอ มูลสงู สดุ ท่ี array นัน้ สามารถเก็บได ชนดิ ของขอ มูลทจ่ี ะเก็บไวใน array น้ัน เคร่ืองหมาย [] เปนตัวบอกให Java รวู า ตวั แปรท่ีถกู สรางขึน้ มานเ้ี ปนarray และเครอื่ งหมายน้ีกจ็ ะเปน ตวั ทใ่ี ชใ นการเขา หาขอ มลู แตละตัวใน array หนงั สือหลาย ๆ เลมเลอื กท่ีจะประกาศ array ในรปู แบบทเ่ี หน็ ดานลา งน้ี ซงึ่ มีความหมายเหมือนกันกบั ทเ่ี ราไดป ระกาศกอนหนาน้ีint listOfNumbers[];double prices[];char vowels[];สําหรบั หนงั สือเลม นเี้ ราจะใชก ารประกาศในแบบทห่ี น่งึหลังจากท่เี ราไดป ระกาศใหต วั แปรเปน array แลวเราก็ตอ งกาํ หนดความจใุ หก ับ array น้ัน ดงั น้ีlistOfNumbers = new int[5];

บทท่ี 4 การใช Array และ String 97เรม่ิ ตน กับ Javaประโยคทเ่ี ราไดเขยี นข้ึนนั้นบอกให Java รวู า เราตองการให Java จองเนอ้ื ทีใ่ นการเกบ็ int เปน จาํ นวนเทา กับ 10 ตัวใหก ับตัวแปร listOfNumbers ซึง่ ตัวแปรน้จี ะเปน ตัวอา งอิง (reference) ถงึ ขอ มูลทัง้ หมดท่ีไดถกู เกบ็ ไวใ น array นี้ ภาพที่ 4.1 แสดงถึงสง่ิ ตา ง ๆ ท่เี กดิ ข้ึนเม่ือเราประกาศการใช arrayประกาศ array ที่ ชื่อของ ชนดิ ของขอ มลู ที่ arrayเก็บ int array num เก็บได int [] num = new int[5]; ใช operator new ในการจองเนอื้ ท่ี ชนิด int จํานวน 5 ตัว index ของ array num num[0] num[1] num[2] num[3] num[4] num.length จะมีคาเทากับ 5ภาพท่ี 4.1 การประกาศและกําหนดขนาดของ arrayเมือ่ มกี ารประกาศใช array เชนint [] num;น้นั array ท่เี ราไดป ระกาศนั้นยงั ไมมีเน้อื ที่ในหนว ยความจาํ เลย เราตองกําหนดขนาดเพ่อื ใหเ กิดการจองเนอื้ ทใ่ี นหนว ยความจาํ ดวยการใช operator new รวมไปถงึ จํานวนของเน้ือท่ที ตี่ องการใช เชนint [] num = new int[5];และทุกครงั้ ของการจองเนอื้ ที่ Java จะกาํ หนดใหขอ มลู ในทกุ ๆ ตําแหนง มคี าเปน 0 เสมอในการเขาหาขอ มลู แตละตัวนน้ั เรากเ็ พยี งแตก ําหนด index ของขอ มลู ทเ่ี ราตองการเขา หา เชนnum[3]num[2]เราไมสามารถเขาหาขอ มลู ณ ตาํ แหนง ทม่ี คี า index เกนิ 4 ไดทั้งนเี้ พราะเรากําหนดให array num มีความจสุ งู สุดเทา กับ 5 ดังนน้ั คา ของ index ทเ่ี ปน ไปได คอื 0 1 2 3 และ 4 ถา หากวาเราเขา หาขอมูลที่ไมอยใู นตําแหนง ท่ีกลาวน้ี Java จะฟอ งดวย error ทนั ที (array index out of bound)การกาํ หนดคา เบอ้ื งตนใหก บั arrayเรารวู า หลงั จากการประกาศและจองเนอ้ื ที่ใหกบั array น้นั ถาเปน array ท่เี กบ็ int ทกุ ๆ หนว ยความจําของ array จะมีคา เปน 0 แตถ าเราตอ งการใหเ ปนคา อ่ืนเรากส็ ามารถทาํ ได ดังโปรแกรมตวั อยา งนี้/* Array1.java */import java.io.*;class Array1 { ภาควิชาคอมพิวเตอรธุรกจิ วทิ ยาลัยฟารอสี เทอรน

บทที่ 4 การใช Array และ String 98เรม่ิ ตน กับ Javapublic static void main(String[] args) {int[] list; //declare array of int list = new int[10]; //allocate space for 10 ints for(int i = 0; i < list.length; i++) System.out.println(\"list[\" + i +\"] = \" + list[i]); }}โปรแกรม Array1.java ประกาศใหต วั แปร list เปน array ทเ่ี ก็บ int เปน จํานวนเทากบั 10 ตัว เมื่อประกาศเสร็จแลว เราก็ใช for loop ในการเขาหาขอ มลู ในแตล ะตวั array โดยแสดงถงึ คา ท่ี Java กําหนดใหกับ array ของเราไปยังหนา จอ ซงึ่ มคี าดงั นี้list[0] = 0list[1] = 0list[2] = 0list[3] = 0list[4] = 0list[5] = 0list[6] = 0list[7] = 0list[8] = 0list[9] = 0การใช loop เปน วิธกี ารทีง่ า ยทสี่ ุดในการเขา หาขอมลู ทุกตัวทอี่ ยูใน array ยกเวน วาเรารูต าํ แหนงท่ีแนน อนของขอ มลู ที่เราตองการใน array นั้น เชน ตาํ แหนง ที่ 5 หรือตาํ แหนง ท่ี 3 เรากเ็ ขา หาไดโ ดยตรงดงั นี้ list[5] หรอื list[3] เปนตนArray ทสี่ รางขน้ึ ใน Java น้นั เราสามารถทีจ่ ะดงึ เอาขนาดของ array ออกมาไดดว ยการเรยี กใชคา คงทที่ ี่ไดถ ูกสรา งข้นึ หลงั จากการประกาศและจองเนอ้ื ท่ีใหกับ array ดงั น้ีlist.length;ทุก array ทไ่ี ดถ กู สรา งขึน้ จะมขี นาดของ array เกบ็ ไวใ นตัวแปรชอื่ length และเราเรยี กขนาดออกมาไดผานทางช่ือของ array ตามดว ย . และตวั แปร lengthเรามาลองกาํ หนดคาในตาํ แหนง ตาง ๆ ใหก บั array ของเรา/* Array2.java */import java.io.*;class Array2 {public static void main(String[] args) {int[] list; //declare array of int list = new int[10]; //allocate space for 10 ints list[5] = 8; list[3] = 2; list[9] = 4; for(int i = 0; i < list.length; i++) System.out.println(\"list[\" + i +\"] = \" + list[i]); }}ผลลพั ธท ีไ่ ดจ ากการ run คอื ภาควิชาคอมพิวเตอรธรุ กิจ วิทยาลยั ฟารอสี เทอรน

บทที่ 4 การใช Array และ String 99เริ่มตนกับ Javalist[0] = 0list[1] = 0list[2] = 0list[3] = 2list[4] = 0list[5] = 8list[6] = 0list[7] = 0list[8] = 0list[9] = 4เราสามารถทจ่ี ะกําหนดคา ใหก บั array โดยท่ไี มต องกาํ หนดขนาดใหก บั array โดยตรง แตให Javaจัดการเกยี่ วกบั เรื่องเน้อื ท่ีใหเรา ดังโปรแกรมตวั อยางตอไปนี้/* Array3.java */import java.io.*;class Array3 { public static void main(String[] args) { int[] list = {2, 3, 1, 56, 90}; for(int i = 0; i < list.length; i++) System.out.println(\"list[\" + i +\"] = \" + list[i]); }}เรากาํ หนดให list เปน array ทเ่ี ก็บ int และกําหนดคา เบอื้ งตน เปน 2 3 1 56 และ 90 ตามลําดบั เม่อืJava เห็นการประกาศในลักษณะน้กี จ็ ะทาํ การจองเน้ือทใี่ หกบั array โดยอตั โนมัติพรอมทง้ั นาํ คา ตา ง ๆ ที่ไดถูกกาํ หนดจาก user ไปใสไ วใ น array list และเมอื่ run ดเู ราก็ไดผ ลลพั ธดังทีเ่ หน็ นี้list[0] = 2list[1] = 3list[2] = 1list[3] = 56list[4] = 90โปรแกรมตัวอยา งตอไปนีแ้ สดงถึงการเก็บขอมูลท่ี user ใสเขามาจาก keyboard เขาสู array/* ArrayOfNumbers.java */import java.io.*;import java.text.DecimalFormat;import java.lang.Integer;class ArrayOfNumbers {public static void main(String[] args) throws IOException {double number, sum = 0; //a number read and sum of numbersdouble[] list; //array of doubleint count; //number of items in arrayString input; //input stringBufferedReader buffer; //input bufferInputStreamReader isr; //input streamDecimalFormat f = new DecimalFormat(\"0.00\");System.out.print(\"How many numbers? : \");isr = new InputStreamReader(System.in);buffer = new BufferedReader(isr); ภาควิชาคอมพิวเตอรธ ุรกิจ วทิ ยาลยั ฟารอสี เทอรน

บทที่ 4 การใช Array และ String 100เรม่ิ ตน กับ Javainput = buffer.readLine();count = Integer.parseInt(input); //total items in listlist = new double[count]; //allocate space forlist//reading each double into listfor(int i = 0; i < list.length; i++) { System.out.print(\"Enter number: \"); input = buffer.readLine(); list[i] = Double.parseDouble(input);}//add all doubles in listint n = list.length - 1; //n is the last index of listwhile(n >= 0) { //looping until n equals to 0 sum += list[n--]; //add list[n] into sum and} //decrement n //calculate average and display result double average = sum / count; System.out.println(\"Sum of numbers = \" + sum); System.out.println(\"Average of numbers = \" + f.format(average)); }}โปรแกรม ArrayOfNumbers.java ถาม user ถงึ จํานวนของขอ มูลสูงสดุ ท่ี user จะใสเขา สโู ปรแกรม ซ่ึงเม่อื ไดแลว โปรแกรมจะใชจ าํ นวนทอ่ี านไดเปน ตวั กาํ หนดขนาดใหก บั arraylist = new double[count];หลังจากนน้ั กจ็ ะอา นขอ มลู ทลี ะตวั จาก user นําไปเกบ็ ไวใ น array listfor(int i = 0; i < list.length; i++) { System.out.print(\"Enter number: \"); input = buffer.readLine(); list[i] = Double.parseDouble(input);}ในขณะทีอ่ านขอ มูลเขา สู array นน้ั เราอาจหาผลรวมของเลขทกุ ตวั พรอม ๆ กันไปดว ยกไ็ ด แตท ่ีโปรแกรมนแ้ี ยกการหาผลรวมก็เพอ่ื ที่จะแสดงใหเห็นถึงการใช loop ในการเขาหา array อกี คร้งั หน่ึง โดยเรากาํ หนดใหต วั แปร n เปน index ตวั สดุ ทายของ array list ดวยประโยคint n = list.length - 1;เราตองไมล มื วา list.length ใหจาํ นวนของขอ มลู ทั้งหมดทอ่ี ยูใน array ดงั นนั้ index ตัวสดุ ทา ยก็คือlist.length – 1 หลังจากนัน้ เราจะใช while loop เปน ตัวเขา หาขอ มลู ใน array แตล ะตวั จากขางหลัง และบวกขอ มลู ทุก ๆ ตวั เขา กบั ตัวแปร sumwhile(n >= 0) { sum += list[n--];}ประโยค sum += list[n--] นน้ั จะบวกขอมูลในตาํ แหนง n เขา กบั ตัวแปร sum กอ นทจ่ี ะลดคาของ n ลงหน่งึ คา และเมอื่ คา n นอ ยกวา 0 เราก็หลดุ ออกจาก while loop ทันที ภาควิชาคอมพิวเตอรธ รุ กิจ วทิ ยาลยั ฟารอีสเทอรน

บทที่ 4 การใช Array และ String 101เรมิ่ ตน กับ Javaการอา งถึง array ดวยการ clone และการ copy arrayเม่ือเราสรา ง array ข้นึ มาแลวเราสามารถทจี่ ะอา งถงึ ตวั แปรตวั นด้ี ว ยตัวแปรอน่ื กไ็ ด แตไมไ ดห มายความวา เราไดส ราง array ตวั ใหมจ ากตัวแปรตวั ใหมนี้ เราเพยี งแตใ ชตวั แปรตวั ใหมในการอางถงึ array ตัวเดมิเพราะฉะนน้ั การกระทําใด ๆ ผา นตวั แปรตวั ใหมก็จะมผี ลกระทบกบั ขอมูลใน array ตวั เดิมนัน้ ดงั โปรแกรมตวั อยางนี้/* Array4.java */import java.io.*;class Array4 { public static void main(String[] args) { int[] list = {2, 3, 1, 56, 90}; for(int i = 0; i < list.length; i++) System.out.println(\"list[\" + i +\"] = \" + list[i]); int[] newList = list; //cloning newList[0] = 11; //changing data at list[0] for(int i = 0; i < list.length; i++) System.out.println(\"list[\" + i +\"] = \" + list[i]); }}เราไดดดั แปลงโปรแกรม Array3.java ใหม กี ารอา งถึง (reference) array list ดว ยตวั แปรตัวใหมท ชี่ ื่อnewListint[] newList = list;และเรากไ็ ดท ําการเปล่ยี นขอ มลู ณ ตาํ แหนง 0 ใหเ ปน 11 ผา นทาง newList เมื่อลอง run ดเู รากจ็ ะไดผลลพั ธด งั ทคี่ าดไวlist[0] = 2list[1] = 3list[2] = 1list[3] = 56list[4] = 90list[0] = 11list[1] = 3list[2] = 1list[3] = 56list[4] = 90สว นวธิ กี าร copy ขอมลู จาก array ตัวหนงึ่ ไปยัง array อีกตัวหน่งึ นนั้ มวี ธิ ีการอยสู ามวธิ ที ท่ี าํ ได วิธที ี่หนงึ่นั้นเราตอ งสรา ง array ใหมข นึ้ มาแลว ก็ copy ขอมูลทุกตวั จาก array ตัวเดิมเขา สู array ตัวใหม ดงั น้ี/* Array5.java */import java.io.*;class Array5 { //original array public static void main(String[] args) { //new array int[] list = {2, 3, 1, 56, 90}; int[] newList = new int[list.length]; ภาควิชาคอมพิวเตอรธรุ กิจ วิทยาลยั ฟารอ ีสเทอรน

บทที่ 4 การใช Array และ String 102เรม่ิ ตนกบั Java //copy each item from list into newList for(int i = 0; i < list.length; i++) newList[i] = list[i]; for(int i = 0; i < list.length; i++) System.out.println(\"newList[\" + i +\"] = \" + newList[i]); }}โปรแกรม Array5.java สราง newList ดวยคาํ สงั่int[] newList = new int[list.length];เรากําหนดขนาดของ newList ดวยขนาดทม่ี าจาก list หลงั จากนั้นเราก็ copy ขอ มลู ทกุ ตัวดวยการใช for– loopfor(int i = 0; i < list.length; i++) newList[i] = list[i];และเมอ่ื run ดเู รากไ็ ดผลลัพธด งั ทคี่ าดไว คอืnewList[0] = 2newList[1] = 3newList[2] = 1newList[3] = 56newList[4] = 90ทีนีเ้ รามาดูวิธที สี่ องกนั/* Array6.java */import java.io.*;class Array6 { //original array public static void main(String[] args) { //new array int[] list = {2, 3, 1, 56, 90}; int[] newList = new int[list.length]; //copy each item from list into newList System.arraycopy(list, 0, newList, 0, list.length); for(int i = 0; i < newList.length; i++) System.out.println(\"newList[\" + i +\"] = \" + newList[i]); }}ถงึ แมวาเรายงั ไมไดพูดถงึ เร่อื งของ class หรือ method แตเ ราก็ตองมาทาํ ความเขาใจถึงการเรยี กใชmethod ท่ี Java มใี ห เพราะวา วิธีทส่ี องน้ีเราใช method arraycopy() ทาํ การสรา งและ copy ขอ มูลใหตอนนี้เราคงตอ งจาํ วธิ กี ารเรยี กใชม ากกวาการทําความเขาใจอยางละเอียด (ซงึ่ เราจะพดู ถึงในบทตอ ๆไป) เรา copy ดวยการใชค ําสงั่System.arraycopy(list, 0, newList, 0, list.length);โดยเราตอ งใสข อมูล หรือ เง่ือนไข (parameter) ตามที่ Java กําหนดไวค อื ภาควิชาคอมพิวเตอรธ รุ กจิ วิทยาลัยฟารอีสเทอรน

บทที่ 4 การใช Array และ String 103เร่ิมตนกบั Javaตัวแรกเปน array ตวั เดมิ ทต่ี อ งการ copy (list)ตวั ทส่ี องเปน index เร่ิมตนของ array ตวั เดิม (0)ตัวทสี่ ามเปน array ตวั ใหมท ตี่ อ งการสรา ง (newList)ตัวทสี่ ี่เปน index เริ่มตนของ array ตัวใหม (0)ตัวทห่ี าเปน จาํ นวนของขอมลู ท่ตี องการ copy (list.length)วิธที ส่ี ามกค็ ลา ย ๆ กบั วธิ ที ส่ี องเพียงแตเ ราเรยี กใช method clone() แทน ซึ่งทาํ ไดด งั นี้/* Array7.java */import java.io.*;class Array7 { //original array public static void main(String[] args) { int[] list = {2, 3, 1, 56, 90}; //cloning process int[] newList = (int[])list.clone(); for(int i = 0; i < list.length; i++) System.out.println(\"newList[\" + i +\"] = \" + newList[i]); }}เราเพียงแตเรยี กใช method clone() ดงั ท่ีเหน็ ในโปรแกรม Array7.java เรากส็ ามารถทจี่ ะมี array ตวัใหมส าํ หรบั การใชง าน ดว ยประโยคint[] newList = (int[])list.clone();เราจําเปนทจี่ ะตองทาํ การ cast ใหก บั array ของเราเสยี กอ นเพือ่ ใหช นิดของ array ทถ่ี กู clone ขึน้ มานน้ัเปนชนิดเดียวกัน ซงึ่ ทาํ ไดด วยการนาํ เอา (int[]) ไปใสไ วหนา ประโยค list.clone() ท้งั นต้ี องกําหนดชอ่ืarray ตัวเดมิ ใหถ ูกตอง (list) เพ่อื ไมใหเกดิ การผดิ พลาดใด ๆวธิ ที สี่ ามทไ่ี ดกลาวไวจ ะ copy ขอมลู ใน array เดมิ ท่มี ีอยทู งั้ หมดไปเกบ็ ไวใ น array ตวั ใหม ดังนัน้ ถาหากวาเราตองการทจ่ี ะสราง array ใหมจากขอ มลู บางสวนของ array ตัวเดิมเราก็ตองใชว ธิ ีท่สี อง ดังตัวอยา งนี้/* Array8.java */import java.io.*;class Array8 {public static void main(String[] args) { int[] list = {2, 3, 1, 56, 90}; //original array int[] newList = new int[list.length-2]; //new array //copy item at index 2, 3, and 4 from list into newList System.arraycopy(list, 2, newList, 0, list.length – 2); for(int i = 0; i < newList.length; i++) System.out.println(\"newList[\" + i +\"] = \" + newList[i]); }} ภาควิชาคอมพิวเตอรธุรกจิ วทิ ยาลยั ฟารอสี เทอรน

บทท่ี 4 การใช Array และ String 104เรมิ่ ตนกบั Javaโปรแกรม Array8.java ของเราตองการท่จี ะ copy ขอมูล ณ ตําแหนงท่ี 2 3 และ 4 จาก array list เขา สูarray newList ในตําแหนง 0 1 และ 2 ตามลาํ ดบั เพราะฉะนนั้ เราตองเรยี กใช method arraycopy()ดงั น้ีSystem.arraycopy(list, 2, newList, 0, list.length – 2);ผลลพั ธข องการ run คอืnewList[0] = 1newList[1] = 56newList[2] = 90การใช array แบบยดื หยนุ (Dynamic Array)เราสามารถทจ่ี ะใชเทคนคิ ทเี่ ราพดู มากอ นหนา นีใ้ นการสรา ง array แบบไมจาํ กดั จํานวนของขอมูลที่สามารถจดั เก็บไดใ น array น้ัน ๆ เราเรยี กการจดั เก็บแบบน้วี า การจดั เก็บแบบยืดหยนุ แตก อนท่เี ราจะสรา งไดน ั้นเราตองกาํ หนดให array เร่มิ ตนของเรามีขนาดเบือ้ งตนกอน หลังจากนน้ั จึงจะสามารถขยายขนาดของ array ได ดงั โปรแกรมตวั อยา งทไี่ ดด ัดแปลงมาจากโปรแกรม AddNumbers.java ทีเ่ ขยี นขึ้นกอ นหนานี้/* DynamicArray.java */import java.io.*;import java.text.DecimalFormat;class DynamicArray {public static void main(String[] args) throws IOException {double number, sum = 0; //a number read and sum of numbersdouble []list = new double[2]; //array of doubleint count = 0; //total numbers readBufferedReader buffer; //input bufferInputStreamReader isr; //input streamStreamTokenizer token; //token from input streamDecimalFormat f = new DecimalFormat(\"0.00\");System.out.print(\"Enter numbers (space between – enter when done): \");isr = new InputStreamReader(System.in);buffer = new BufferedReader(isr);//get tokens from input buffertoken = new StreamTokenizer(buffer);//set priority to EOL so that we can break out of the looptoken.eolIsSignificant(true);//get each number from tokens//calculate the sum until EOL is reachedwhile(token.nextToken() != token.TT_EOL) { switch(token.ttype) { //token is a number case StreamTokenizer.TT_NUMBER: //double the size of list if(count > list.length-1) { double []newList = new double[list.length*2]; System.arraycopy(list, 0, newList, 0, list.length); list = newList; //point to new list } list[count] = token.nval; //save token into list ภาควิชาคอมพิวเตอรธ รุ กจิ วิทยาลัยฟารอีสเทอรน

บทที่ 4 การใช Array และ String 105เริม่ ตนกบั Java sum += list[count]; //calculate sum count++; //number of tokens read break; default: System.out.println(\"Token is not a number! \"); break; } } //calculate average and display result double average = sum / count; System.out.println(\"Sum of numbers = \" + sum); System.out.println(\"Average of numbers = \" + f.format(average)); }}เราประกาศตัวแปร list ใหเ ปน array ทเี่ ก็บ double เร่ิมตน ดว ยจาํ นวนเทากบั 2ตัว และในการนาํ ขอ มลูเขา สู array น้ันเราจะตรวจสอบดูวา จาํ นวนของ index ทเี่ ราใชใ นการเขาหาขอมูลแตล ะตัวมีคาเกินจํานวนของขอ มลู ที่เปน อยูขณะนนั้ หรอื ไม ซ่งึ ถาเปน จรงิ เรากจ็ ะทาํ การขยายขนาดใหก ับ array list เปนจาํ นวนสองเทา ของขนาดเดมิ และทาํ การ copy ขอ มูลจาก array list ไปสู array ใหมนี้ (newList) หลงั จากนนั้เรากอ็ างถึง array ตัวใหมน ีด้ ว ยตวั แปรเดิมทีเ่ ราใชในการเก็บขอมูลครงั้ แรก (list) เราไมตอ งกังวลถึงหนวยความจาํ ที่เราไดใ ชไปในการสรา ง array ตวั เดมิ เพราะ Java จะทาํ การตรวจสอบถึงหนวยความจาํ ที่ไมม ีการใชง าน และจะคนื หนว ยความจาํ นใี้ หก บั ระบบโดยอตั โนมตั ิif(count > list.length-1) { double []newList = new double[list.length*2]; System.arraycopy(list, 0, newList, 0, list.length); list = newList;}วธิ ีการขยายขนาดของ array แบบน้ที ําใหเ ราไมต องกาํ หนดขนาดของ array ใหมขี นาดใหญมากมายเกินไปตอนท่ีเราสรา ง array ในครง้ั แรก เราสนใจเฉพาะเมอื่ จําเปนตองขยายขนาดของ array จริง ๆเทา น้ัน ผูอานอาจเปลี่ยนแปลงการขยายขนาดของ array ดวยการเพิม่ ทลี ะกตี่ ัวก็ได ทั้งน้กี ข็ ้นึ อยกู ับความจําเปนและเหมาะสมกบั งานนน้ั ๆผลลัพธข องการ run โปรแกรม DynamicArray.javaEnter numbers (space between - enter when done): 15 5 20 15 10 15 20Sum of numbers = 100.0Average of numbers = 14.29โปรแกรมตัวอยา งการใช array ในการนบั จํานวนคร้งั ของลกู เตาท่อี อกซํา้ กันจากการโยนหลาย ๆ คร้ัง/* DiceRolling.java */import java.io.*;class DiceRolling { public static void main(String[] args) { int face, roll; int[] frequency = new int[7];//number of times each face occur //rolling the die for 100 times roll = 1; while(roll <= 100) { //calculate face of die face = (int)(Math.random() * 6) + 1; ภาควิชาคอมพิวเตอรธุรกิจ วิทยาลัยฟารอ สี เทอรน

บทท่ี 4 การใช Array และ String 106เร่ิมตน กับ Java //save each time the same face occur by using //indeces as faces of die frequency[face]++; roll++; } System.out.println(\"Face\tFrequency\"); for(int i = 1; i < frequency.length; i++) System.out.println(i + \"\t\" + frequency[i]); }}โปรแกรม DiceRolling.java ใชต ัว index ของ array เปนหนา ของลกู เตาทีถ่ ูกโยนโดยการใชการสมุ ผา นทาง method random() ซึ่งจะบังคับใหผ ลลพั ธของการโยนนนั้ อยูระหวาง 1 – 6 ดวยการคูณ 6 เขากบัผลลพั ธท ่ีไดจ ากการสุม บวกเขากับ 1 การนับจาํ นวนคร้งั ก็ทําไดด วยการเพมิ่ คาใหก ับขอมลู ท่ี index นั้น ๆของลกู เตา เชน ถาการโยนไดคาเทา กบั 6 เรากเ็ พิ่มคาดว ย frequency[6]++ ซ่งึ จะทาํ ใหค า ทอ่ี ยู ณตาํ แหนง นน้ั เพมิ่ ขนึ้ อกี หนึ่งคา วธิ กี ารใช index ของ array ในลักษณะนช้ี ว ยลดขน้ั ตอนการนับจํานวนของหนาลกู เตาทเ่ี กิดข้นึ ไดด กี วาวธิ อี น่ื ๆ เชน การใช if – else มาชว ยในการตรวจสอบวาการโยนใหค า อะไรแลว จึงเพิ่มคา ใหกับตวั แปรที่เกบ็ การนบั ของหนานน้ั ๆif(face == 1) count1++;else if(face == 2) count2++;else if(face == 3) count3++;……else if(face == 6) count6++;ซ่งึ เปน วิธที ต่ี อ งเขยี น code มากกวา และใชตวั แปรเยอะกวา การใช frequency[face]++ผลลัพธของการ runFace Frequency1 122 253 244 75 126 19การคน หาขอมลู ใน arrayการคน หาขอ มลู ใน array นัน้ ทําไดอ ยสู องวธิ ใี หญ ๆ คือ การคนหาแบบตามลําดบั (sequential search)และ การคน หาแบบหารสอง (binary search) เราจะมาดถู ึงวิธกี ารคน หาแบบตามลําดบั กอ น เพราะเปนการคนหาทงี่ ายทส่ี ดุการคนหาแบบตามลาํ ดบั (Sequential search)ในการคนหาแบบนีน้ ้ันเราจะเรม่ิ ตน จากขอ มูลตัวแรกสดุ ทอี่ ยใู น array ทําการเปรยี บเทยี บขอมลู ตัวนีก้ ับขอ มลู ที่ตองการคนหาวาเปน ตวั เดยี วกันหรอื ไม ถาใชเรากห็ ยดุ การคนหา ถา เราคน ไปจนถงึ ตวั สดุ ทา ยแตกย็ งั ไมใ ช เรากร็ วู า ขอ มลู ท่ตี องการคนหาไมไ ดอ ยใู น array ลองดโู ปรแกรมตวั อยา งกัน ภาควิชาคอมพิวเตอรธรุ กจิ วทิ ยาลยั ฟารอ ีสเทอรน

บทที่ 4 การใช Array และ String 107เรม่ิ ตน กับ Java/* SeqSearch.java */import java.io.*;class SeqSearch { public static void main(String[] args) { int[] list = {2, 3, 1, 56, 90};;int number = 90; //number to searchint i = 0; //loop indexboolean notFound = true; //loop control variablewhile(notFound) { if(number == list[i]) //if found notFound = false; //break out of loop i++; //move to next number} //in the list if(!notFound) System.out.println(number + \" is in the list.\"); else System.out.println(number + \" is not in the list.\"); }}เราใช while loop ในการเขา หาขอมูลทุกตวั ทอี่ ยูใน array list โดยเรากําหนดใหต วั แปร notFound ซ่ึงมีชนิดเปน boolean เปน ตัวควบคุมการทํางานของ loop ซึง่ ถา การคน หาประสพผลสําเรจ็ ตวั แปรnotFound ก็จะถกู กาํ หนดใหเปน false และ while loop ของเรากจ็ ะยตุ ิการทาํ งานทนั ที หลังจากนั้นเราก็แสดงผลของการคนหาไปยงั หนาจอ ดงั ตวั อยา งของการคน หาเลข 90 จากโปรแกรมของเราน้ี90 is in the list.ถา หากวา เราไมตอ งการใช boolean เปนตวั กําหนดการทํางานของ loop เราก็อาจกาํ หนดให loop ทาํ งานไปเรอื่ ย ๆ และใชคาํ สัง่ break เปนตวั กาํ หนดการหยดุ กไ็ ด โดยการเปลย่ี น code ใหเ ปน/* SeqSearch2.java */import java.io.*;class SeqSearch2 { public static void main(String[] args) { int[] list = {2, 3, 1, 56, 90};int number = 90; //number to searchint i = 0; //loop indexwhile(true) { if(number == list[i]) //if found break; //break out of loop i++; //move to next number} //in the list if(i >= list.length) System.out.println(number + \" is not in the list.\"); else System.out.println(number + \" is in the list.\"); }} ภาควิชาคอมพิวเตอรธรุ กจิ วิทยาลยั ฟารอีสเทอรน

บทท่ี 4 การใช Array และ String 108เรมิ่ ตน กบั Javaเรารวู า ถา ขอมูลทต่ี อ งการคน หาไมอ ยใู น list ตัวแปร i จะมคี า เกินกวา จํานวนของขอมูลทีม่ อี ยใู น arrayดังนนั้ การแสดงผลจะตองใชก ารเปรยี บเทยี บคา ของ i กับจํานวนของขอ มูลทม่ี อี ยใู น array (แทนการเปรยี บเทยี บดว ย boolean กอนหนา นี)้ วิธีการตรวจสอบแบบนี้ลดขนั้ ตอนการทาํ งานของ loop ลงไปไดหน่ึงครั้ง เพราะเราจะ break ออกจาก loop ทันที ทีเ่ ราคน หาขอมูลเจอการคน หาแบบนีไ้ มค อ ยนยิ มใชก นั มากเทา ไร ทัง้ น้ีก็เพราะวา จะใชเ วลาในการคน หามาก ถาขอมลู ที่ตองการคน หาอยดู า นหลังสดุ ของ array ยิ่งถา array เก็บขอมลู ไวเยอะการคนหาก็จะใชเวลามากย่งิ ข้นึการคนหาแบบหารสอง (Binary search)การคน หาในรูปแบบของ binary search จะทาํ การแบงขอมลู ท้ังหมดออกเปนสองสวนทกุ ครงั้ ทม่ี ีการเปรียบเทยี บขอ มูลทต่ี องการคน หา (key) การคนหาเร่ิมตนดว ยการเปรยี บเทียบ key กับขอ มูล ณตําแหนง ท่อี ยูกงึ่ กลางของ array ถา key มคี า นอ ยกวาขอมลู ณ ตําแหนงนีก้ ารคนหาก็ยา ยไปคนทางซา ยของขอมูลนี้ และจะคน ทางขวาถา key มคี า มากกวา ขอมูลทต่ี ําแหนง น้ี การคน หาจะดาํ เนินไปจนกวาจะคนพบ นัน่ ก็คือ key มคี า เทากบั ขอมลู ท่ตี าํ แหนง น้นั หรือไมก ย็ ตุ ิการคนถา ไมม ขี อมูลนัน้ ใน arrayส่ิงทสี่ ําคัญในการคนหาแบบนก้ี ็คอื ขอ มูลจะตองมกี ารจดั เกบ็ แบบจดั เรยี งจากนอ ยไปหามาก เพราะถาไมอยูในรปู แบบนแี้ ลว การคน หาก็จะทาํ ไมไดวิธกี ารคน หาดว ย binary search จะลดจาํ นวนคร้ังของการเปรยี บเทยี บลงไปทีละครึง่ ทาํ ใหการคนหาใชเวลานอยลง ตวั อยา งเชน การคนหาใน array ท่ีมขี อมูลเทากบั 1024 ตัวจะใชก ารเปรยี บเทียบเพยี ง 10ครั้ง ครัง้ แรกลดลงเหลือ 512 ครัง้ ทส่ี องเหลอื 256 และคร้งั ตอ ๆ ไปเหลอื 128 64 32 16 8 4 2 และ 1จะเหน็ วาลดลงมาก ซ่ึงเปนจุดแขง็ ของการคน หาของ binary search โปรแกรม BinSearch.java แสดงการคนหาดวยการใช binary search/* BinSearch.java */import java.io.*;class BinSearch { public static void main(String[] args) { int[] list = {1, 2, 3, 4, 5, 6, 7, 8 ,9, 10}; //generate key to search int key = (int)(Math.random() * 10 + 1); int low = 0; //lower index int high = list.length - 1; //higher index int middle; //number at the middle (pivot) boolean found = false; //indicate search result while(low <= high) { middle = (low + high) / 2; //calculate pivot if(key == list[middle]) { //if found - stop searching found = true; break; } else if(key < list[middle]) //key is in lower half high = middle - 1; else low = middle + 1; //key is in upper half } if(found) System.out.println(\"Found \" + key + \"!\"); else System.out.println(key + \" not found!\"); }} ภาควิชาคอมพิวเตอรธุรกจิ วทิ ยาลยั ฟารอ สี เทอรน

บทท่ี 4 การใช Array และ String 109เริ่มตน กับ Javaโปรแกรม BinSearch.java ของเราเร่มิ ตนดว ยการกําหนดให array list มขี อมูลเปน จาํ นวนเทา กบั 10 ตวัและกาํ หนดใหข อ มูลท่ีตองการคนหา (key) มาจากการสุม หลังจากนน้ั กก็ าํ หนดให index หวั (low) และทา ย (high) ของ array เปน 0 และ list.length – 1 ตามลาํ ดบั เราจะใช while loop เปนตวั เขา หาขอ มลูใน array list ของเราดว ยการเปรยี บเทยี บคา ของ low กบั high ซงึ่ ถาเมื่อใดก็ตามที่คา ของ low มากกวาหรอื เทา กบั high ก็หมายความวา การคน หาของเราไมประสพผลสาํ เรจ็ คอื ไมมีขอมลู น้นั อยใู น list เรากจ็ ะยุตกิ ารทาํ งานทนั ที เราหาขอ มลู ทอ่ี ยตู รงกลางดว ยmiddle = (low + high) / 2;และเปรยี บเทยี บการคน หาท่ีประสพผลสาํ เรจ็ ดวยประโยคif(key == list[middle]) { found = true; break;}เราจะเปรยี บเทยี บและแบง ขอ มลู ออกเปน สองสวนดว ยelse if(key < list[middle]) high = middle - 1;else low = middle + 1;เราจะยา ย index ทอี่ ยหู ลังสดุ ใหเ ปน middle – 1 ถาขอมูลทเี่ ปน key นอยกวา ขอมูลท่ีอยู ณ ตําแหนงmiddle และจะยา ย low ไปอยทู ่ี middle + 1 ถา key มีคา มากกวา ขอ มลู ณ ตําแหนง middle เราจะทาํไปจนกวาจะเจอขอมลู ที่ตําแหนง middle หรอื ไมก ห็ ยดุ การทาํ งานโดยไมพ บขอมลู ท่ีตอ งการคนหาเลยการเรยี งลาํ ดบั (sort) ขอมลู ใน arrayมวี ธิ ีการหลากหลายวธิ ีทส่ี ามารถนํามาใชใ นการจดั เรยี งขอมูลใน array แตเ นอ่ื งจากวา เรายังตองศกึ ษาถงึสว นประกอบอนื่ ๆ ของ Java กอนทีเ่ ราจะนาํ เอาวธิ ีการเหลา น้นั มาใชไ ด ซง่ึ หนังสือสว นมากกจ็ ะนาํ เอาวิธีการจดั เรียงขอ มูลไปไวใ นวชิ าโครงสรางขอ มลู (ซ่งึ กเ็ ปน หนังสอื เลมตอ ไปจากหนังสอื เลม นี้) ดงั น้นั เราจะพูดถึงเฉพาะการนําเอา method การ sort ท่ี Java มใี หม าใชโดยตรงเพอื่ ใหก ารทาํ งานเปน ไปไดรวดเรว็ ยงิ่ ขน้ึเราเพยี งแตส ง array ท่ีเราตอ งการ sort ไปให method sort() ท่ี Java มใี ห ดังนี้Arrays.sort(list)โดยท่ี list เปน array ที่เราตอ งการ sort โปรแกรม Sort.java แสดงวธิ ีการเรยี กใช sort จาก classArrays//Sort.java - recursive versionimport java.lang.Integer;import java.util.Arrays;class Sort {public static void main(String[] args) {int[] list = new int[100]; //array with 100 intsint i; //loop index//populate list with random intsfor(i = 0; i < 100; i++) list[i] = (int)(Math.random() * 100 + 1); ภาควิชาคอมพิวเตอรธ ุรกจิ วทิ ยาลยั ฟารอสี เทอรน

บทที่ 4 การใช Array และ String 110เรมิ่ ตนกบั Java //display 100 ints to screen – 20 per line for(i = 0; i < list.length; i++) { if(i % 20 == 0) System.out.println(); System.out.print(list[i] + \"\t\"); } System.out.println(); Arrays.sort(list); //calling sort from class Arrays //display again for(int j =0 ; j < list.length; j++) { if(j % 20 == 0) System.out.println(); System.out.print(list[j] + \"\t\"); } System.out.println(); }}ยังมี method อกี หลายตวั ใน class Arrays ทเี่ ราสามารถเรยี กใชไ ด ท้งั นีก้ ต็ อ งดวู า เรากําลังทาํ อะไรอยูในท่นี จ้ี ะขอพูดอีกเพยี ง method เดียวคือ binarySearch() เพราะวาเราไดพ ดู ถึงวธิ ีการเขียน code ของbinary search มากอนหนานแี้ ลว โปรแกรม BinarySearch.java แสดงถงึ วธิ ีการเรียกใช methodbinarySearch() ท่วี าน้ี//BinarySearch.java - recursive versionimport java.util.Arrays;class BinarySearch { public static void main(String[] args) { int[] list = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; int key = (int)(Math.random() * 10 + 1);//key to search for int found = Arrays.binarySearch(list, key); if(found >= 0) System.out.println(\"Found \" + key + \" at index \" + found); else System.out.println(key + \" is not in the list!\"); }}เราเรียก method binarySearch() ดวย parameter 2 ตวั คือ (1) array ที่มขี อ มลู อยู – ในท่นี ค้ี อื listและ (2) ขอมลู ทีต่ องการคนหา – ซ่งึ กค็ ือ key ในโปรแกรมดานบนนี้ ประโยคint found = Arrays.binarySearch(list, key)ถาขอมลู ท่ีตองการคน หาอยูใน list การเรียก method binarySearch() กจ็ ะไดคาของ index ทข่ี อ มูลน้ันอยสู งกลบั มายงั ตัวแปร found แตถ า หาไมเจอคาทส่ี ง กลับจะมคี า นอยกวา 0 เสมอ ดังนั้นการแสดงผลจงึตอ งเปรียบเทยี บคาของ found กับคาของ 0เมอ่ื ทดลอง run ดผู ลลพั ธท ี่ไดค ือFound 3 at index 2Found 1 at index 0 ภาควิชาคอมพิวเตอรธ ุรกจิ วิทยาลัยฟารอีสเทอรน

บทท่ี 4 การใช Array และ String 111เริม่ ตน กบั Javaการสรา ง array ท่ีมขี อมูลเปน array (Array of arrays)เราไดใ ช array ท่ีมีขอ มูลเปน primitive type จากตัวอยางกอ นหนา น้หี ลาย ๆ ตวั อยาง เรามาลองดกู ารสราง array ทม่ี ขี อมูลเปน array ดู เราจะเรมิ่ ตน ดว ยการประกาศ ดงั นี้int[][] table = new int[5][5];ซง่ึ หมายถงึ การประกาศใหตวั แปร table เปน array ท่มี ขี อ มลู 5 ตวั โดยทแี่ ตละตวั น้ันเปน array ที่เกบ็ขอ มูลท่ีเปน int อยู 5 ตัว เราจะใช [][] สองตัวเปน ตัวบอกให Java รูวาตัวแปรตวั น้ีคอื array ทใี่ ชเ ก็บarray โดยทวั่ ไปเรามกั จะเรยี ก array ในลกั ษณะนว้ี า array 2 มติ ิ ภาพท่ี 4.2 แสดงถงึ เน้อื ท่ขี อง arraytableชือ่ ของ array index ของขอ มลู ในแตล ะแถวและ ตําแหนงของ [0] [1] [2] [3] [4]ขอ มูลแตล ะตวั(index) table[0] table[1] table[2] table[3] table[4] int [] [] table = new int [5] [5];ภาพที่ 4.2 การสราง array ที่เกบ็ array (array 2 มิต)ิโปรแกรม Array9.java ทเ่ี หน็ ดานลา งนแ้ี สดงการใช array 2 มติ ิ โดยกาํ หนดใหมีขนาด 5 x 5 และกําหนดใหขอ มูลมีคา อยรู ะหวาง 1 ถึง 10 ดวยการสุม จาก random()ความยาวหรือขนาดของ table หาไดจ ากคา คงทท่ี ่ีเกบ็ ไว length เชนเดียวกนั กบั array 1 มิติ สวนขนาดของขอ มลู ทีอ่ ยใู นแตล ะแถวหาไดจากคา คงท่ใี นแถวน้นั เชนtable[0].lengthtable[3].lengthโปรแกรม Array9.java ใช table[i].length เปน ตวั กําหนดขนาดในแตละแถวโดยท่ี i เปน index ของแถวน้ัน ๆ/* Array9.java */import java.io.*; ภาควิชาคอมพิวเตอรธ รุ กจิ วิทยาลัยฟารอีสเทอรน

บทท่ี 4 การใช Array และ String 112เร่ิมตนกบั Javaclass Array9 { public static void main(String[] args) { int[][] table = new int[5][5]; for(int i = 0; i < table.length; i++) { for(int j = 0; j < table[i].length; j++) table[i][j] = (int)(1 + Math.random() * 10); } for(int i = 0; i < table.length; i++) { for(int j = 0; j < table[i].length; j++) System.out.print(table[i][j] + \"\t\"); System.out.println(); } }}ผลลัพธข องการ run โปรแกรม Array9.java คือ7328758548768627 10 9 7 510 4 4 2 2เรามาดูโปรแกรมตัวอยา งอีกตวั หน่งึ ทปี่ ระกาศและกาํ หนดคาใหกบั array 2 มิตดิ ว ยการกําหนดแบบอัตโนมตั จิ าก Java เอง/* Array10.java */import java.io.*;class Array10 { public static void main(String[] args) { //declare 2-D array with specific data int[][] table = { {1, 2, 3}, {5, 6, 8}, {7, 4, 6}, {4, 8, 9} }; for(int i =0 ; i < table.length; i++) { for(int j = 0; j < table[i].length; j++) System.out.print(table[i][j] + \"\t\"); System.out.println(); } }}เรากําหนดให table เปน array 2 มิตทิ ีม่ จี ํานวนแถวเทา กบั 4 และจาํ นวนขอ มลู ในแตล ะแถวเทา กับ 3โดยการกําหนดนัน้ เราตองใสข อ มูลในแตล ะแถวในเครื่องหมาย {} และแบง ขอ มลู ทอี่ ยแู ถวในแตล ะแถวดวยเครอ่ื งหมาย , ดังนี้int[][] table = { {1, 2, 3}, /* แถว 0 */ {5, 6, 8}, /* แถว 1 */ {7, 4, 6}, /* แถว 2 */ ภาควิชาคอมพิวเตอรธ รุ กจิ วิทยาลัยฟารอ ีสเทอรน

บทท่ี 4 การใช Array และ String 113เริม่ ตน กับ Java {4, 8, 9} /* แถว 3 */ };เราสามารถทจี่ ะใหข อ มูลอยใู นบรรทดั เดยี วกนั ได เชนint[][] table = {{1, 2, 3}, {5, 6, 8}, {7, 4, 6}, {4, 8, 9}};หลังจาก run โปรแกรมแลว ผลลัพธท ่ไี ดค อื123568746489การใช array ทม่ี จี าํ นวนของขอมลู ในแตละแถวไมเทากันเราสามารถทจี่ ะกําหนดใหขอ มลู ในแตละแถวของ array มจี าํ นวนไมเทากนั ได ดังตัวอยา งดานลา งน้ีdouble [][] list = new double[5][];ซง่ึ เปน การประกาศ array 2 มิติที่มจี ํานวนแถวเทา กับ 5 แตจ าํ นวนของขอมูลในแตละแถวยังไมไ ดถูกกาํ หนด เราอาจกําหนดใหขอ มลู ในแถว 0 มจี าํ นวนเทา กับ 4 และขอมลู ในแถว 4 มจี าํ นวนทา กบั 10 เปนตน ดงั นี้list[0] = new double[4];list[4] = new double[10];สวนขอ มูลในแถวท่เี หลืออยูก แ็ ลวแตว าเราอยากที่จะใหม ีขอ มูลก่ตี วั หรอื เราอาจกําหนดใหข อ มลู ในแตล ะแถวมจี าํ นวนเทา กับคาท่ีเพิ่มขน้ึ ตามคา ของแถว (index) เชนint m = 0;while(m < 5) { list[m] = new double[m + 1]; m++;}โปรแกรม Array11.java สรา ง array 2 มติ ิทมี่ ขี อ มูลในแตละแถวเทากบั คาของ index ในแถวน้ัน ๆ/* Array11.java */import java.io.*;class Array11 { public static void main(String[] args) { double [][]list = new double[5][];//allocate space for each rowint m = 0;while(m < 5) { list[m] = new double[m + 1]; m++;}for(int i = 0; i < list.length; i++) { for(int j = 0; j < list[i].length; j++) System.out.print(list[i][j] + \"\t\"); System.out.println(); ภาควิชาคอมพิวเตอรธรุ กิจ วิทยาลัยฟารอ ีสเทอรน

บทท่ี 4 การใช Array และ String 114เร่ิมตนกบั Java } }}เมื่อ run ดูผลลพั ธทีไ่ ดค ือ0.00.0 0.00.0 0.0 0.00.0 0.0 0.0 0.00.0 0.0 0.0 0.0 0.0การกาํ หนดขนาดของ array แบบนี้ทาํ ใหก ารใชเนือ้ ที่ในการเก็บขอมูลในแตละแถวมปี ระสทิ ธิภาพมากขึ้นท้งั นี้กเ็ พราะวา เราใชเฉพาะเนือ้ ที่ทจี่ ําเปนตอ งใชเทา นัน้ ถาเราใชการกาํ หนดแบบเกา เราตองใชหนว ยความจาํ เทากบั 8 x 25 = 200 byte แตถ า เราใชการกาํ หนดตามเทา ท่ีใช เราก็จะใชห นว ยความจาํเพยี งแค 8 x 15 = 120 byteการสราง array ทีม่ คี วามจุของขอมูลในแตล ะแถวไมเทา กนั เออื้ อํานวยความสะดวกในการจองเน้ือที่ ทาํใหก ารใชห นว ยความจาํ มีประสทิ ธิภาพมากยง่ิ ขน้ึ แตการทาํ งานจะตองมีการระมดั ระวังเปนพเิ ศษ เพราะจํานวนของขอมูลในแตล ะแถวมจี าํ นวนไมท า กนั ผูอา นตองใชค วามละเอียดในการออกแบบ ถา ตองการใชarray แบบนี้ตัวอยา งการใช Array of arrays ในการหาคา max คา min และคา เฉลย่ี//ArrayOfArrays.javaimport java.io.*;class ArrayOfArrays {public static void main(String[] args) {//inititial scoresint [][]score = { {45, 87, 68, 57}, {98, 70, 58, 69}, {85, 42, 68, 82} };double average; //average of scoresint max, min, total = 0; //maximum, minimum, total of scoresint count = 0; //total scoresmax = score[0][0]; //assuming max score is at [0][0]min = score[0][0]; //assuming min score is at [0][0]//looping for 3 rowsfor(int i = 0; i < score.length; i++) { //looping for 4 columns for(int j = 0; j < score[i].length; j++) { if(score[i][j] > max) //find max score max = score[i][j]; if(score[i][j] < min) //find mim score min = score[i][j]; total += score[i][j]; //calculate total count++; //number of scores }}//calculate average of scoresaverage = (double)total / count;System.out.println(\"Maximum score is \" + max);System.out.println(\"Minimun score is \" + min);System.out.println(\"Average score is \" + average); ภาควิชาคอมพิวเตอรธ รุ กจิ วทิ ยาลยั ฟารอ สี เทอรน

บทที่ 4 การใช Array และ String 115เรม่ิ ตน กบั Java }}โปรแกรม ArrayOfArrays.java กาํ หนดให score เปน array ทเี่ ก็บขอมูลเปนจาํ นวนเทา กบั 3 แถว แถวละ 4 ตวั เราจะหา score ทีเ่ ลก็ ทสี่ ดุ score ทีใ่ หญทสี่ ดุ รวมไปถงึ การคาํ นวณหาคา เฉลีย่ ของ scoreทงั้ หมด เราใช for – loop 2 ตัวในการเขา หา array ของเราเหมือนเดิม พรอ มทง้ั ตรวจสอบวา score ตวัไหนเปน max และ score ตัวไหนเปน min ดว ยการกําหนดใหท งั้ สองตวั แปรมีคา เปนขอ มลู ตวั แรกสดุ ท่ีอยใู น array และจะทาํ การเปรยี บเทยี บขอมลู ณ ตําแหนงทงั้ หมดใน array กับขอ มูลน้ี ประโยคif(score[i][j] > max) max = score[i][j];จะเปลีย่ นคา ของ max ใหมีคา เทากับ score[i][j] ถาขอ มลู ทต่ี าํ แหนงนมี้ ากกวาคา ของ max และประโยคif(score[i][j] < min) min = score[i][j];จะเปลย่ี นคา ของ min ใหมีคาเทากับ score[i][j] ถา ขอ มลู ทต่ี าํ แหนงนี้นอยกวา คา ของ min วธิ กี ารหาคาของ max และ min แบบน้ีสามารถนาํ ไปใชไ ดก บั การหาคา max และ min โดยทว่ั ไปไดโดยไมต อ งสนใจวา ขอมูลทอ่ี ยูภ ายใน array จะมี range อยชู วงไหน ท้ังน้เี พราะเราใชข อมูลตวั แรกสุดเปนตวั ตรวจสอบกอ น ทาํ ใหการหาคาของทั้ง max และ min เปน ไปไดโดยไมต อ งกาํ หนดคา ใหกบั ตัวแปร max หรอื minใด ๆ ท้งั ส้ิน (ถา เราไมตอ งการตรวจสอบเอง เรากส็ ามารถทจี่ ะเรยี กใช method max() และ min() ท่ีมอี ยูใน class Math ได – ดใู นบทกอ น ๆ) ในสว นของการหาคา เฉล่ียก็เหมอื นกบั ทเ่ี ราไดเ คยทาํ มาแลว กอนหนา นี้การใช array of arrays นนั้ ก็เหมือนกับท่ีเราใชต าราง หรอื table ในการเก็บขอมูลตา ง ๆ หนังสอื หลาย ๆเลม เรยี ก array of arrays ทีม่ แี ค row และ column วา array 2 มิติ (two dimensional array) สว นarray of arrays ที่มีขอ มลู เปน array อกี เราก็มักจะเรียกวา array 3 มติ ิ เปนดงั นท้ี ุกครั้งที่มกี ารเพิม่ มิติใหก บั array แตก ารมองเหน็ หรือการใชก ็คงมนี อย ถา หากวา จํานวนมิตทิ ใ่ี ชม ีมากกวา 3 มิติ เพราะวาคนเราชินกับการมองเหน็ แบบ 3 มิตติ ลอดเวลา (เราจะทิ้งใหผ ูอานศกึ ษาในเรอ่ื งของ array 3 มิตเิ อง)การใช Stringการใช string นน้ั สามารถทาํ ไดห ลาย ๆ วธิ ี และวิธีแรกท่เี ราจะทาํ ความรูจักน้ันเปนการใช array เปน หลักในการทํางานกบั string นัน้ ๆ เราคงไมสามารถทจ่ี ะเรยี ก string ในลักษณะน้ไี ดเ ต็มปากเตม็ คํามากนกัเพราะวา โดยความเปนจรงิ แลว array ท่เี ราใชใ นการทาํ งานท่ีเก่ียวของกบั String นน้ั ไมใช stringโดยตรงแตเ ปน array ท่ีเก็บ char หลาย ๆ ตวั ไว หรอื ท่เี รยี กกันวา array of characters ซงึ่ หนงั สอืหลาย ๆ เลมกม็ ักจะเรยี ก string วา array of characters เราจะตรวจสอบวิธีการใช string แบบนี้พอสังเขป แลว เราจะกลบั มาพดู ถงึ String ของ Java อยางละเอยี ดอีกทหี น่ึงArray of charactersการประกาศ string แบบน้ีทาํ ไดงาย ๆ เหมอื นกับทเี่ ราประกาศใช array ทเ่ี ก็บขอมูลชนดิ อนื่ เพียงแตเราเปล่ยี นให array เก็บ char แทนเทาน้นั เชนchar [] string = new char[20];การประกาศดานบนนเ้ี ปน การสรา ง array ที่ใชเกบ็ char จํานวนเทากับ 20 ตัว โปรแกรมตวั อยา งดานลา งแสดงการใช array of characters//ArrayOfChars.javaimport java.io.*;class ArrayOfChars { public static void main(String[] args) { ภาควิชาคอมพิวเตอรธุรกจิ วิทยาลัยฟารอีสเทอรน

บทท่ี 4 การใช Array และ String 116เร่มิ ตนกับ Java //declare array of char char[] str = new char[26]; int i = 0; //populate str with characters a to z for(char c = 'a'; c <= 'z'; c++) { str[i] = c; i++; } //print all characters to screen for(i = 0; i < 26; i++) System.out.print(str[i]); System.out.println(); }}โปรแกรม ArrayOfChars.java เร่มิ ตน ดว ยการสราง array of chars จํานวน 27 ตัวจากประโยคchar[] str = new char[26];หลงั จากน้ันก็ใช for – loop ในการกาํ หนดคา ใหกบั ทุก ๆ ตาํ แหนงของ str ดว ยการใช char เปน indexของ loop เนือ่ งจากวา การเพม่ิ คา ใหกบั char นัน้ ทีจ่ ริงแลว เปน การเพมิ่ คา ใหก ับตวั เลขท่เี ปนตัวแทนของตวั อกั ษรน้นั ๆ เชน ถาเรากําหนดให char c = 'f' การเพม่ิ คา ใหกบั c หน่งึ คร้งั จะทําให c มคี าเปน 'g' ซึง่เปนตวั อกั ษรทอี่ ยูถ ดั ไปในตาราง ASCII เพราะฉะนนั้ การใช for – loop นี้ก็ทําใหเ กดิ การกาํ หนดคาใหกบัstr ทกุ ตาํ แหนงfor(char c = 'a'; c <= 'z'; c++) { str[i] = c; i++;}ผอู า นคงเดาไดว าผลลพั ธของโปรแกรมตวั น้ีคอื อะไร Æ abcdefghijklmnopqrstuvwxyzการใช array of characters นนั้ ไมค อ ยจะสะดวกมากนกั ท้งั น้เี พราะเปนการทาํ งานทเ่ี กย่ี วกบั array เราอยากท่ีจะมี string จริง ๆ ท่ีเราสามารถทจ่ี ะทาํ กระบวนการตา ง ๆ ได เชน บวก string 2 ตวั เขาดวยกนัหรือตรวจสอบความเทา กนั ความเหมอื นกนั ของ string อยางนเี้ ปน ตน และ Java ก็มี class String ใหเ ราเรยี กใชงานที่เกย่ี วของกับ string โดยตรงString ใน JavaString ใน Java น้นั เปน object ดงั นน้ั เราจึงจาํ เปน ตองเรียกใช class String ในการสราง string เพือ่ การใชง านของเรา เชน เราอาจตอ งการเกบ็ ชือ่ ของ user ไวในโปรแกรม หรอื สง ขอความทเี่ ปน string ไปใหuser อยางนี้เปน ตนการประกาศใช String กไ็ มยาก ซึง่ ทําไดด งั น้ีString str = new String(\"Java is fun\");หรอื แบบน้ีString str = \"Java is fun\";โดยเฉพาะการประกาศในประโยคทส่ี องนี้ มผี ลเทา กบั ประโยค 2 ประโยคตอไปน้ีchar[] str = {'J', 'a', 'v', 'a', ' ', 'i', 's', ' ', 'f', 'u', 'n'};String str = new String(str); ภาควิชาคอมพิวเตอรธ ุรกจิ วิทยาลยั ฟารอสี เทอรน

บทท่ี 4 การใช Array และ String 117เริ่มตน กบั Javaจะเห็นไดว า string กค็ ือ array of chars นั่นเอง บางครั้งการประกาศตวั แปร string โดยทไี่ มม ีการกาํ หนดคา ใหก บั string นัน้ เรากท็ าํ ไดด วยการประกาศเหมอื นกบั การประกาศตวั แปรชนดิ อน่ื เชนString name;ซึง่ มีความหมายวา ตวั แปร name เปน string ทไี่ มไ ดอ า งถงึ คาใด ๆ เลย และถาเรา compile โปรแกรมท่ีมกี ารประกาศแบบนี้จะมี error เกดิ ขนึ้ วธิ กี ารแกไขเพอ่ื ไมใ ห Java ฟอ งตอน compile เราตอ งกําหนดคาnull ใหก ับ string name ดังน้ีString name = null;ซึ่งบอกให Java รวู า string name ไมไดอ า งถงึ ขอมูลใด ๆ เลย เราสามารถทีจ่ ะอา งถึงขอมลู ใด ๆ ก็ไดหลงั จากน้นัลองมาดูโปรแกรมตัวอยา งการทาํ งานกับ string//StringOps.javaimport java.io.*;class StringOps { public static void main(String[] args) { String first = \"Java \"; String second = \"Programming\"; String third = null; int percent = 100; third = first + second; System.out.println(third + \" is \" + percent + \"% fun!\"); }}โปรแกรม StringOps.java ประกาศตวั แปรท่เี ปน String 3 ตวั คอื first second และ third โดยกาํ หนดใหfirst มีคาเปน \"Java \" second มคี า เปน \"Programming\" และ third ไมมคี า อางอิงถึง string ใด ๆ พรอมกันนี้เราไดก ําหนดใหต ัวแปร percent มคี า เปน 100 ประโยคthird = first + second;ทําการรวม first และ second เขา ดว ยกนั ซงึ่ ทาํ ให third มคี า เปน \"Java Programming\" และในประโยคทีท่ าํ การแสดงผลไปหนา จอนนั้ เราไดเพ่ิมการแสดงผลคา ของตัวแปร percent และ string คงทต่ี วั อนื่ เขาไปดว ยเพ่อื ใหผ ลลพั ธเปนJava Programming is 100% fun!เราสามารถทจี่ ะรวมคาของตวั แปรอื่นทไี่ มใ ช string เขา กบั string ไดดังนี้ สมมตวิ าเราเพม่ิ ตัวแปรตอ ไปนี้int percent = 100;String is = \" is \";String fun = \"%fun!\";และเรารวม String และ int เขาดวยกนั ดว ยประโยคthird = first + second + is + percent + fun; ภาควิชาคอมพิวเตอรธ ุรกิจ วิทยาลัยฟารอีสเทอรน

บทที่ 4 การใช Array และ String 118เร่มิ ตน กับ Javaเรากจ็ ะไดผ ลลพั ธเ หมือนกันกับท่ีเราไดท ํากอ นหนานี้ สาเหตทุ ่ีทาํ ไดเ พราะ Java จะเปลย่ี น int ใหเ ปนstring กอนท่จี ะรวมเอา string ทง้ั หมดเขาดว ยกันการเปรียบเทยี บ Stringเราไมส ามารถท่ีจะเปรยี บเทยี บ string 2 ตัวดวยการใช == ไดเ หมือนกับทเี่ ราทาํ กบั ตัวแปรที่เปนprimitive type ได เชนfirst == thirdเพราะวาประโยคดงั กลา วจะเปรยี บเทยี บวา string ท้งั สองตวั อางถงึ ท่ีเดยี วกนั หรือไม (ทท่ี ี่เก็บ string ใดstring หน่ึง) เชน ถาเรามีString myString = \"Motorcycle\";String yourString = myString;ซ่งึ ทาํ ใหต วั แปร myString และ yourString อางถงึ ขอมลู เดียวกัน (และจะใหคา true ถา มกี ารเปรยี บเทยี บดวย ==) ไมใ ชก ารเปรยี บเทียบถงึ ขอ มลู ทตี่ ัวแปรท้ังสองอางอยู เชน ถา เรามี string ตอ ไปน้ีString keyboard = \"from Thailand\";String kb = \"from Thailand\";ถา เราเปรยี บเทยี บดว ยการใชif(keyboard == kb) …เราจะไดค า false ถึงแมวาตวั แปรทง้ั สองจะมีคาที่เหมอื นกนั ท้ังนีเ้ พราะวา เคร่ืองหมาย == จะเปรยี บเทยี บคา อา งอิง (ท่อี ยู หรือ address ในหนว ยความจาํ ) ของตัวแปรทง้ั สองไมใชค า ทที่ ง้ั สองตวัแปรเก็บไว เราตอ งใช method อ่ืนท่ี Java มีใหใ น class Stringโปรแกรมตวั อยา งของการเปรยี บเทียบ string//StringCompare.javaimport java.io.*;class StringCompare { public static void main(String[] args) { String first = \"Java \"; String second = \"Programming\"; String third = \"Java Programming\"; String forth; forth = first + second; //forth is \"Java Programming\" if(third == forth) System.out.println(\"third and forth refer to the same string\"); else System.out.println(\"third and forth do not refer to the same string\"); first = forth; //first and forth refer to the same string System.out.println(\"first is \" + first); System.out.println(\"forth is \" + forth); if(first == forth) System.out.println(\"first == forth is true\"); else ภาควิชาคอมพิวเตอรธุรกิจ วิทยาลัยฟารอสี เทอรน

บทท่ี 4 การใช Array และ String 119เรม่ิ ตนกับ Java } System.out.println(\"first == forth is false\");}โปรแกรม StringCompare.java แสดงถงึ การเปรยี บเทยี บ string ดว ยการใชเ ครอ่ื งหมาย == ถาเราสังเกตใหด จี ะเหน็ วา string third และ forth มคี าท่เี หมอื นกนั (string ท่ีประกอบไปดวย char ท่ีเหมอื นกนั หมด) เมือ่ run ดูผลลพั ธท่ีไดคือthird and forth do not refer to the same stringซึ่งบอกใหเ รารวู า การใชเครอ่ื งหมาย == เปรียบเทียบความเหมอื นหรือความแตกตา งของ string ไมไดเชน เดียวกนั กบั ประโยคเปรียบเทยี บถดั มาในโปรแกรม เรากาํ หนดให first อา งถงึ ขอ มูลทเี่ ดยี วกนั กบัforth และเม่อื เรา run ผลลัพธท ี่ไดกเ็ หมอื นกบั ท่เี ราไดค าดหวังไวคือfirst is Java Programmingforth is Java Programmingfirst == forth is trueถาเราตอ งการทจ่ี ะเปรยี บเทยี บ string จรงิ ๆ เราตองใช method equals() และ method compareTo()ดงั โปรแกรมตัวอยางตอ ไปนี้//StringCompare1.javaimport java.io.*;class StringCompare1 { public static void main(String[] args) { String first = \"Java \"; String second = \"Programming\"; String third = \"Java ProgramminG\"; String forth; forth = first + second; //forth is \"Java Programming\" if(third.equals(forth)) System.out.println(\"third equals forth\"); else System.out.println(\"third not equals forth\"); first = forth; //first and forth refer to the same string if(first.equals(forth)) System.out.println(\"first equals forth\"); else System.out.println(\"first not equals forth\"); }}เราไดเปลี่ยนให third มีคา เปน \"Java ProgramminG\" เพ่อื ทจี่ ะแสดงใหเหน็ วาในการเปรยี บเทยี บน้ันchar ทุกตัวจะตอ งเหมือนกัน ผลลัพธท เี่ ราไดจากการ run คอืthird not equals forthfirst equals forthเราใชประโยค third.equals(forth) ในการเปรยี บ third และ forth วา มีคาทเ่ี หมือนกนั (เทากนั ) ซ่งึ ถาเทา กันจรงิ ผลลพั ธท ไ่ี ดจากการเปรียบจะมคี า เปน true และจะใหค า false ถาไมเทากันการเปรยี บเทยี บ string 2 ตวั เพอื่ ตรวจสอบความเทา กนั น้นั เราจะเอาตวั ไหนอยูดานหนา กไ็ ด เชน ภาควิชาคอมพิวเตอรธรุ กจิ วิทยาลัยฟารอ ีสเทอรน

บทที่ 4 การใช Array และ String 120เร่มิ ตนกบั Javathird.equals(forth) หรอื forth.equals(third) ก็ไดmethod equals() จะตรวจสอบตัวอักษรทกุ ตวั ที่อยใู น string โดยใหค วามสนใจในเร่อื งของตัวอกั ษรวาเปนตัวอกั ษรตัวเลก็ หรอื ตวั ใหญ การตรวจสอบจะใหค าท่เี ปนจรงิ ถาเหมือนกันทั้งรปู รางและขนาด เชน gหรอื G ไมใ ชตวั อกั ษรตวั เดยี วกัน การตรวจสอบจะเปน falseในการเปรยี บเทยี บบางครั้งเรากไ็ มสนใจวาตวั อกั ษรทีอ่ ยภู ายใน string นน้ั เปน ตัวเล็กหรือตัวใหญ ซ่งึ ถาเราตองการเพยี งแตตรวจสอบถึงความเหมอื นทางรูปรา งเรากต็ อ งใช method equalsIgnoreCase() ในการเปรียบเทยี บ string นน้ั ๆถาเราเปลยี่ นการเปรยี บเทยี บในโปรแกรมตัวอยา งกอ นหนานจี้ ากการใช equals() มาเปนequalsIgnoreCase() ดงั น้ีif(third.equalsIgnoreCase(forth)) System.out.println(\"third equals forth\");else System.out.println(\"thrid not equals forth\");เรากจ็ ะไดผ ลลพั ธเ ปนthird equals forthการเปรียบเทยี บความไมเทา กัน (มากกวา หรือ นอยกวา ) ของ stringหลาย ๆ คร้ังเราตองตรวจสอบถึงความมากกวา หรือ นอยกวา ของ string เพ่อื ใหการจดั เกบ็ string นั้น ๆอยใู นรูปแบบทมี่ กี ารจัดเรยี ง ไมว า จะเปน จากนอยไปหามาก หรอื มากไปหานอย ในการตรวจสอบวาstring ตวั ไหนมากกวา หรอื นอ ยกวา กันนัน้ เราจะใช method compareTo() เชนmyString.compareTo(yourString);สมมตวิ า myString มคี า เปน \"lovely bike\" และ yourString มคี าเปน \"lovely kite\" การเปรยี บเทยี บดว ยcompareTo() จะใหค า ทีเ่ ปนบวก ท้ังนี้ก็เพราะวา ตัวอกั ษร 'k' ใน yourString นนั้ มีคา มากกวา ตัวอักษร'b' ใน myString เรามาดโู ปรแกรมตัวอยา งการใช method compareTo() กันดกี วา//StringCompareTo.javaimport java.io.*;class StringCompareTo { public static void main(String[] args) { String first = \"lovely bike\"; String second = \"lovely kite\"; String third = \"lovely\"; //compare first and second if(first.compareTo(second) > 0) System.out.println(\"first is greater than second\"); else System.out.println(\"second is greater than first\"); //compare first and third if(first.compareTo(third) > 0) System.out.println(\"first is greater than third\"); else System.out.println(\"third is greater than first\"); String a = \"A\"; ภาควิชาคอมพิวเตอรธ ุรกจิ วทิ ยาลยั ฟารอ สี เทอรน

บทท่ี 4 การใช Array และ String 121เร่ิมตน กับ Java String z = \"Z\"; String str1 = \"AAA\"; String str2 = \"AAA\"; //compare a and z if(a.compareTo(z) < 0) System.out.println(a + \" is less than \" + z); //compare str1 and str2 if(str1.compareTo(str2) == 0) System.out.println(str1 + \" equals \" + str2); }}ผลลพั ธท เี่ ราไดจากการ run คอืsecond is greater than firstfirst is greater than thirdA is less than ZAAA equals AAAโปรแกรมของเราเปรียบเทยี บ first กบั second ดวยการตรวจสอบคาทไ่ี ดจ ากการเปรียบเทยี บกับ 0 ซ่งึ ถาfirst มากกวา second ประโยคนี้ก็จะเปน true แตเ นื่องจากวา first นั้นไมมากกวา second การเปรียบเทยี บของเราจงึ ใหผ ลลพั ธเ ปน false Java จงึ ประมวลผลประโยคทอี่ ยใู น else (สง ผลลพั ธไปหนา จอ) – การประมวลผลประโยคอน่ื ๆ ก็คลา ยกันโดยทว่ั ไปเราจะเปรียบเทยี บคา ที่ไดจ าก method compareTo() กับ 0 เสมอเพราะจะทําใหเราไดค า trueหรือ false ท่สี ามารถนําไปใชใ นการเลือกประมวลผลประโยคตาง ๆ ไดต ามทเี่ ราตอ งการการเปรยี บเทยี บความเหมือนและเทา กนั ก็ทาํ ไดด ว ยการใชเ ครื่องหมาย == ดังเชนประโยคสุดทา ยของโปรแกรมif(str1.compareTo(str2) == 0) System.out.println(str1 + \" equals \" + str2);ในการเปรยี บเทียบดวย method compareTo() นคี้ าทส่ี ง กลบั มาเปนไปไดเ พียงแค 3 คา คือ -1, 0, และ1 เทา นัน้ โดยท่ี-1 หมายถึง string ทีอ่ ยูทางซา ย นอยกวา string ท่ีอยูท างขวา (string ที่เปน parameter)0 หมายถงึ string ท้งั สองนัน้ เทากัน1 หมายถึง string ท่อี ยทู างซา ย มากกวา string ทีอ่ ยูทางขวาเชน ถา เรามีประโยค string1.compareTo(string2);string1 หมายถึง string ทอ่ี ยทู างซายstring2 หมายถึง string ทอี่ ยทู างขวา หรอื string ทเ่ี ปน parameterการเขา หาตวั อักษรทอ่ี ยใู น stringเราสามารถทจี่ ะเขาหาตวั อกั ษรตา ง ๆ ท่อี ยูใ น string ไดดวยการใช method ตา ง ๆ ดงั ทไ่ี ดแสดงไวเ ปนตัวอยา งในโปรแกรม StringChars.java//StringChars.javaimport java.io.*; ภาควิชาคอมพิวเตอรธ รุ กิจ วทิ ยาลัยฟารอีสเทอรน

บทท่ี 4 การใช Array และ String 122เรม่ิ ตนกบั Javaimport java.lang.Character;class StringChars { public static void main(String[] args) { //setting up constant string String string = \"Learn to write programs in Java doesn't take\" + \" as long as I think it would. But to fully understand\" + \" it is a time consuming task.\";int charCount = 0; //count of lettersint vowelCount = 0; //count of vowelsint lowerCaseCount = 0; //count of lowercase lettersint upperCaseCount = 0; //count of uppercase lettersint spaceCount = 0; //count of white spaces//check all lettersfor(int i = 0; i < string.length(); i++) { char ch = string.charAt(i); //check if it's a letter if(Character.isLetter(ch)) charCount++; //check if it's an uppercase if(Character.isUpperCase(ch)) upperCaseCount++; //check if it's a lowercase if(Character.isLowerCase(ch)) lowerCaseCount++; //check if it's a white space if(Character.isWhitespace(ch)) spaceCount++; //convert it to lowercase ch = Character.toLowerCase(ch); //check if it's a vowel if(ch == 'a' || ch == 'e' || ch == 'i' || ch == 'o' || ch == 'u') vowelCount++;} System.out.println(charCount + \" characters counted.\"); System.out.println(upperCaseCount + \" uppercase letters counted.\"); System.out.println(lowerCaseCount + \" lowercase letters counted.\"); System.out.println(vowelCount + \" vowels counted.\"); System.out.println(charCount - vowelCount + \" consonants counted.\"); System.out.println(spaceCount + \" spaces counted.\"); }}ผลลพั ธท ี่ไดจ ากการ run คอื99 characters counted.4 uppercase letters counted.95 lowercase letters counted.37 vowels counted.62 consonants counted. ภาควิชาคอมพิวเตอรธรุ กจิ วิทยาลยั ฟารอ สี เทอรน

บทท่ี 4 การใช Array และ String 123เริม่ ตนกับ Java24 spaces counted.การทาํ งานของโปรแกรมเรม่ิ ตน ดว ยการกาํ หนดใหต วั แปร string มีคา เปนคา คงที่ที่อยใู น \" \" เราจะเขาหาตวั อกั ษรแตละตัวดวย for – loop และดึงเอาตัวอักษรออกมาจาก string แตละตัวดว ยคาํ สงั่char ch = string.charAt(i)ซึ่งจะดึงเอาตวั อักษร ณ ตาํ แหนง index i นนั้ ๆ มาเกบ็ ไวท ่ีตวั แปร ch หลังจากนั้นกต็ รวจสอบดวยmethod ตา ง ๆ ทีม่ ีอยใู น class Character เชนCharacter.isLetter(ch) ใหคา true ถา เปนตวั อักษรCharacter.isUpperCase(ch) ใหคา true ถา เปน ตัวอักษรตวั ใหญCharacter.isLowerCase(ch) ใหค า true ถาเปนตวั อักษรตัวเลก็Character.isWhitespace(ch) ใหคา true ถา เปนชอ งวาง (เคาะแปน หรอื tab)พรอ มทั้งเพ่มิ คา ใหกับตัวแปรทงั้ หลายท่เี ปน ทีเ่ กบ็ จาํ นวนครงั้ ของตวั อกั ษรตาง ๆ ท่ีปรากฏใน stringหลังจากนั้นก็เปลยี่ นตวั อักษรใหเปน ตวั เลก็ เพ่อื ใชตรวจสอบวาเปน สระในภาษาองั กฤษหรอื ไม สาเหตทุ ี่เปลย่ี นเพราะเราไมอ ยากท่จี ะเสยี เวลาในการตรวจสอบสระตวั เล็กทหี น่ึง และตัวใหญอ ีกทหี นงึ่ อยา งไรก็ตามท้ังสองก็เปน สระอยูเสมอch = Character.toLowerCase(ch);if(ch == 'a' || ch == 'e' || ch == 'i' || ch == 'o' || ch == 'u') vowelCount++;ยังมี method อกี มากมายใน class Character และ class String ทเ่ี ราสามารถนาํ มาใชในการทํางานท่ีเกีย่ วขอ งกบั string ตัวอยา งตอ ไปน้ีเปนการคน หาคาํ (sub string) ท่อี ยใู น string ดวยการใช methodindexOf()//IndexOf.javaimport java.io.*;import java.lang.Character;class IndexOf { public static void main(String[] args) { //setting up constant string String string = \"Learn to write programs in Java doesn't take\" + \" as long as I think it would. But to fully understand\" + \" it is a time consuming task.\";int itCount = 0; //count of itString it = \"it\"; //string to seach for//search for \"it\"int index = string.indexOf(it);while(index >= 0) { itCount++; //move to first letter after last \"it\" index += it.length(); //look for next \"it\" index = string.indexOf(it, index);} System.out.println(\"it appeared \" + itCount + \" times.\"); }} ภาควิชาคอมพิวเตอรธุรกิจ วิทยาลยั ฟารอีสเทอรน

บทที่ 4 การใช Array และ String 124เริ่มตนกบั Javaผลลัพธของโปรแกรมคือit appeared 3 times.โปรแกรมของเรากําหนดให index มคี า เปนตาํ แหนงท่ี \"it\" ปรากฏอยใู น string ดว ยคาํ ส่ังint index = string.indexOf(it)เม่ือการคนหาประสพผลสําเรจ็ เราก็จะใช while – loop ในการคนหาตอไป แตก อนท่เี ราจะดาํ เนินการนั้นเราจะเพม่ิ คาหนงึ่ คา ใหกบั itCount กอน หลังจากน้นั เราจะเลอื่ น index ไปอยูในตําแหนงของตวั อกั ษรตวัแรกท่อี ยูห ลงั \"it\" ดวยคําส่งั index += it.length() เนื่องจากวา method indexOf() จะสง คา ของตาํ แหนง ของตวั อักษรตวั แรกของ \"it\" มาให เสร็จแลวกท็ าํ การคนหาตอไปดว ยคําสัง่index = string.indexOf(it, index)ทําการคน หาไปจนกระทั่งหมด string เราก็ออกจาก while – loopในการใช indexOf() คนหานนั้ เราตอ งเปรยี บเทียบคา ทส่ี งกลบั มากบั 0 เพราะถา หาไมเ จอคาของ indexกจ็ ะเปน -1 ทําใหเ ราหลดุ ออกจาก while – loop ไดMethod indexOf() นน้ั มอี ยสู องตัวทร่ี ับเงอื่ นไข (parameter) ไมเ หมอื นกัน ดงั ที่เหน็ ในโปรแกรม ตวั แรกรับเพียงคา เดยี วคอื sub string ท่ตี อ งการคน หา สว นตวั ทส่ี องรับคาสองคา คือ sub string ที่ตองการคน หา และ จดุ (index) เร่มิ ตน ของการคนหา ซงึ่ ถาสงั เกตใหดีเราใช indexOf() ตวั แรกในการคนหาครัง้แรก และตัวทส่ี องในการคนหาตวั ตอ ๆ ไป ทงั้ น้ีก็เพราะวา ครั้งแรกสดุ เราไมร วู า คาของ index แตในครัง้ ที่สองนั้นเราไดค า ของ index แลวผูอา นตองจําไวเ สมอวา indexOf() จะสงคา -1 มาใหถ า ไมมี sub string ใน string นน้ั ๆและจะสงคา ของตาํ แหนง ท่ี sub string น้ันอยถู ามี sub string ทีว่ าตอไปเราลองมาดโู ปรแกรมทท่ี ําการดึงเอากลมุ ของตวั อักษร (คํา) หรือทเ่ี รยี กวา sub string ออกจากstring ดู//SubString.javaimport java.io.*;import java.lang.Character;class SubString { public static void main(String[] args) { //setting up constant string String string = \"Learning Java\";String str1 = string.substring(0); //the whole stringString str2 = string.substring(9); //string: \"Java\"String str3 = string.substring(0, 8); //string: \"Learning\" System.out.println(\"str1 > \" + str1); System.out.println(\"str2 > \" + str2); System.out.println(\"str3 > \" + str3); }}Java มี method substring() ใหเราใชอ ยสู องตวั คือ substring() ทไ่ี มมี parameter และ substring()ท่มี ี parameter อยูส องตัว โดยทต่ี วั แรกเปน index เรมิ่ ตนของ sub string และ parameter ตัวทส่ี องเปน index ตวั สดุ ทา ยที่อยูใ น sub string นน้ั แตไ มน ับตวั มนั เอง ดังท่ีไดแ สดงไวในโปรแกรม ภาควิชาคอมพิวเตอรธุรกจิ วทิ ยาลยั ฟารอสี เทอรน

บทท่ี 4 การใช Array และ String 125เริ่มตนกับ JavaString str2 = string.substring(9)หมายความถึงการเรม่ิ นบั ที่ index = 9 ไปจนถึงตวั สดุ ทา ยใน string นัน้ คอื เร่มิ ทตี่ วั อักษร 'J' ไปจบท่ีตวั อักษร 'a' ซงึ่ คอื คําวา \"Java\" สว นString str3 = string.substring(0, 8)หมายถงึ การเรม่ิ นบั ท่ี index = 0 ไปจนถึงตวั ที่ 8 คือตงั้ แตต วั อักษร 'L' ไปจนถึงตวั อักษร ' ' (space) แตไมน ับ space ดงั นัน้ sub string ท่เี ราไดกค็ อื \"Learning\"เราสามารถทจ่ี ะดงึ เอา sub string ออกจาก string ทเ่ี ปน คา คงท่ีได เชนString sub = \"Basic idea about Java\".substring(6) จะให \"idea aboutJava\"หรือString sub = \"Basic idea about Java\".substring(6, 10) จะให \"idea\"ตารางที่ 4.1 แสดงถึง method ตา ง ๆ ของ class Stringตาราง 4.1 method ของ class String ความหมายmethod ความยาวของ String (จาํ นวนตวั อักษร)length() ตําแหนงเร่มิ ตนที่ String ตวั นีอ้ ยู ถา ไมม จี ะเปน -1indexOf(String) ตาํ แหนงเร่มิ ตนท่ี String ตัวนอ้ี ยตู ามจดุ ท่ีกาํ หนด ถา ไมindexof(String, start index) มีจะเปน -1 ตาํ แหนง สดุ ทา ยของ String ตวั นี้ เทา กับ -1 ถา ไมมีlastIndexof(String) ตําแหนงสดุ ทายของ String ตวั น้ตี ามจดุ ทกี่ ําหนดlastIndexof(String, start index) เทากับ -1 ถาไมมี String ทไี่ มม ี space อยูท้ังดานหนา และหลงัtrim() คาของ String ณ ตําแหนงทก่ี าํ หนดจนจบsubstring(start index) คา ของ String ณ ตาํ แหนงทีก่ าํ หนดทงั้ สองsubstring(start index, end index) เปลยี่ น char ทกุ ตวั ดว ย char ตวั ใหมทก่ี าํ หนดreplace(old char, new char) คา ตวั อักษร ณ ตาํ แหนงทก่ี ําหนดcharAt(index) true ถา String ทัง้ สองตัวเทากันequals(String) true ถา String ทั้งสองตัวเทากนั ไมส นใจ caseequalsIgnoreCase(String) true ถา String เริม่ ตนดวย String ทกี่ ําหนดstartsWith(String) true ถา String เร่ิมตนดว ย String ทก่ี ําหนด ณstartsWith(String, start index) ตําแหนงท่กี าํ หนด true ถา String จบดวย String ทก่ี ําหนดendsWith(String)การใช class StringBuffer ในการสรา ง stringแทนทีจ่ ะใช class String เราก็สามารถที่จะใช class StringBuffer แทนได การทํางานกไ็ มแ ตกตา งกนัมากมายนัก เชน สมมตวิ าเราจะสรา ง string สักตัวหนึง่ เรากท็ าํ ได ดังน้ีStringBuffer string = new StringBuffer(\"Basic String Operations\");เราสรา ง object หน่งึ ตวั ช่ือ string จาก class StringBuffer โดยกาํ หนดคา เบอื้ งตน เปน \"Basic StringOperations\" เราไมส ามารถทจ่ี ะสรา ง string เหมือนกบั ทเ่ี ราสรา งดว ย class String ได เราตองจองเนื้อท่ีใหก ับตวั แปรดว ยคําส่งั new กอน หลังจากนน้ั กก็ ําหนดคา ใหก บั ตวั แปรน้ี เราอาจประกาศดว ยการประกาศแบบนี้ ภาควิชาคอมพิวเตอรธรุ กจิ วิทยาลัยฟารอ ีสเทอรน

บทท่ี 4 การใช Array และ String 126เริม่ ตนกบั JavaStringBuffer string = null;string = new StringBuffer(\"Just another way to declare\");แตไ มใ ชแ บบน้ีStringBuffer string = \"Just another way to declare\";ขอ ดีของการใช StringBuffer กค็ ือ เราสามารถทจ่ี ะเปล่ียนแปลง string ทีเ่ ราสรางข้ึนได (object จากclass String ทเ่ี ราใชกอนหนา น้ที ําไมได) และเรายังสามารถทีจ่ ะกําหนดขนาดของ string จาก classStringBuffer ไดต ามความพงึ พอใจของเรา ลองมาดูโปรแกรมตัวอยางการใช object จาก classStringBuffer กัน//StringBufferTest.javaimport java.io.*;class StringBufferTest { public static void main(String[] args) { //setting up constant string StringBuffer string = new StringBuffer(\"fish\"); System.out.println(\"string is \" + string); //append \"er\" after \"fish\" string.append(\"er\"); System.out.println(\"string is \" + string); //append \"man\" after \"fisher\" using method insert() string.insert(string.length(), \"man\"); System.out.println(\"string is \" + string); }}โปรแกรม StringBufferTest.java แสดงการสราง object จาก class StringBuffer ดว ยคาํ สัง่StringBuffer string = new StringBuffer(\"fish\")จะทาํ ใหค าของ string เปน fishuiuiหลังจากทเ่ี ราแสดงขอมูลที่อยใู น string แลวเรากน็ าํ เอา string \"er\" มาเชอื่ มเขากบั string \"fish\" ดว ยคาํ ส่ังstring.append(\"er\")จะทาํ ใหค าของ string เปนfisherทําใหข อ ความทอี่ ยูใน string เปลี่ยนเปน \"fisher\" และหลงั จากที่เราแสดงผลที่ไดใหมน้ไี ปยงั หนา จอ เราก็เปล่ยี นขอมูลใน string ใหมด วยการนาํ เอา string \"man\" มาเช่ือมเขากบั string ที่เราไดก อนหนาน้ีดวยการใช method insert() ดังน้ีstring.insert(string.length(), \"man\") ภาควิชาคอมพิวเตอรธรุ กิจ วิทยาลัยฟารอ ีสเทอรน

บทที่ 4 การใช Array และ String 127เริม่ ตน กับ Javaจะทาํ ใหค า ของ string เปน fishermanเราเรียก insert() ดว ย parameter 2 ตัวคอื 1). ความยาวของ string เดมิ ซงึ่ กค็ อื จุดเร่มิ ตนของการเชื่อมและ 2). string ตัวใหมท ีเ่ ราตอ งการเชื่อม คอื \"man\" เมอ่ื run ดแู ลวผลลพั ธท ีไ่ ดค ือstring is fishstring is fisherstring is fishermanเราสามารถทจ่ี ะเปลี่ยนขนาดของ object ที่มาจาก class StringBuffer ไดด งั นี้string.setLength(6)ซึ่งจะทําใหข อมูลท่อี ยใู น string เปล่ียนไป หลังจากที่เราเปลี่ยนขนาดของ string และเพ่มิ ประโยคสําหรับการแสดงผลในโปรแกรมของเราใหเปนSystem.out.println(\"string after set length is \" + string)ผลลัพธท ่ีเราจะไดจ ากการ run กจ็ ะกลายเปนstring after set length is fisherเราไมไ ดถ ูกจํากดั ใหใสข อมูลทเ่ี ปน string เทา นั้นใน object ที่มาจาก class StringBuffer เราสามารถที่จะเรียกใช append() หรือ insert() กบั ขอ มลู ชนิดอน่ื ๆ ได เชนโปรแกรมตัวอยา งตอ ไปน้ี//StringBufferTest1.javaimport java.io.*;class StringBufferTest1 { public static void main(String[] args) { //setting up constant string StringBuffer string = new StringBuffer(); string.append(2); System.out.println(\"string is \" + string); //append \" fisher\" after 2 string.append(\" fisher\"); System.out.println(\"string is \" + string); //append \"men\" after \"fisher\" using method insert() string.insert(string.length(), \"men\"); System.out.println(\"string is \" + string); string.append(\" with \"); System.out.println(\"string is \" + string); string.append(100); string.append(\" fish.\"); System.out.println(\"string is \" + string); }} ภาควิชาคอมพิวเตอรธ รุ กิจ วิทยาลัยฟารอสี เทอรน

บทท่ี 4 การใช Array และ String 128เร่มิ ตน กบั Javaเราไมไดท ําอะไรมากมายนกั เพยี งแตเรยี กใช method append() ดว ยคาทีเ่ ปน int เชนstring.append(2) หรือ string.append(100) เปนตน Java ยังยอมใหเราเช่อื มขอ มูลท่มี คี วามหลากหลายของชนดิ ของขอมูลเขาสู object ท่มี าจาก class StringBuffer ไดโ ดยไมจ าํ กัดจาํ นวนผลลัพธของโปรแกรมหลงั จากการปรับปรงุ คอืstring is 2string is 2 fisherstring is 2 fishermenstring is 2 fishermen withstring is 2 fishermen with 100 fish.สว นหนึง่ ของ class StringBuffer ท่นี าสนใจก็คือ การกาํ หนดขนาดใหกบั buffer ท่ีรองรบั ขอ มูลในobject ตาง ๆ ทีเ่ กดิ จาก class น้ี นนั่ กค็ ือ Java จะกาํ หนดขนาดของ buffer ใหเ ทา กบั ขอมลู ทมี่ ีอยูใ นbuffer บวกกับอีก 16 ตวั อักษรเสมอ เชน ถา เราสรา ง objectStringBuffer name = new StringBuffer(\"Chiang Mai\");ซึง่ มจี ํานวนตัวอักษรทง้ั หมด (นบั ชอ งวา งดว ย) เทากับ 10 ตวั Java จะจองเนอื้ ทใี่ หม ีความจเุ ทา กบั 26ตวั เราสามารถตรวจสอบความจขุ อง buffer ดว ยการเรยี กใช method capacity() ได เชน ถา เราสรางประโยคตอ ไปนี้StringBuffer s = new StringBuffer(\"Chaing Mai\");System.out.println(\"Length of \" + s + \" is \" + s.length());System.out.println(\"Capacity of \" + s + \" is \" + s.capacity());หลังจากการประมวลผล เราจะไดผลลพั ธด งั นี้Length of Chaing Mai is 10Capacity of Chaing Mai is 26ตวั อยางตอไปนี้คงเปน ตวั อยา งสุดทา ยท่เี ราจะแสดงใหเ หน็ ถงึ การใช method อกี ตวั หนึ่งในการเปล่ยี นแปลงขอ มลู ทอ่ี ยใู น string ใหอ ยูใ นรปู แบบของการกลบั หัวกลับหาง (reverse)//ReverseString.javaimport java.io.*;class ReverseString { public static void main(String[] args) { //setting up a constant string StringBuffer string = new StringBuffer(\"I love Chaing Mai\"); //create an empty string StringBuffer revStr = new StringBuffer();revStr.append(string); //append string to revStrrevStr.reverse(); //reverse it System.out.println(\"Reverse of [\" + string + \"] is [\" + revStr + \"]\"); }}ผลลพั ธข องการ run คอืReverse of [I love Chaing Mai] is [iaM gniahC evol I] ภาควิชาคอมพิวเตอรธรุ กิจ วทิ ยาลัยฟารอ ีสเทอรน

บทท่ี 4 การใช Array และ String 129เริ่มตน กบั Javaหลงั จากทีส่ ราง string ดวยคา \"I love Chiang Mai\" แลวเรากส็ ราง object อีกตวั หนึ่งโดยไมม กี ารอา งถงึ คาใด ๆ ท้ังส้ินดวยคาํ สง่ั StringBuffer revStr = new StringBuffer() หลังจากนน้ั เราเช่ือม stringเขากบั revStr ดว ยการใช method append() เชนเดยี วกบั ตวั อยา งอืน่ ๆ ที่เราไดท าํ มากอ นหนา น้ี เสรจ็จากการเชือ่ มเราก็ใชคาํ สงั่ revStr.reverse() เพอื่ ทําการ reverse ขอมลู ที่อยใู น revStr ที่เหลืออยกู ็คอืการสงผลลพั ธข องการ reverse ไปยงั หนาจอผอู า นอาจสงสยั วาทาํ ไมเราไมส รา ง object ดว ยการสง string ไปใหกับ revStr ในตอนแรกทเ่ี ราสรางrevStr เชนStringBuffer revStr = new StringBuffer(string)เราทําไมไ ดเพราะ Java ไดสรา ง method ในการสราง object จาก class StringBuffer ไวเพียงสามตัวคือ1. StringBuffer() โดยไมใสเ งอื่ นไขใด ๆ2. StringBuffer(int len) ตอ งใสข นาดของ buffer3. StringBuffer(String str) ตอ งใส object จาก class String เทา น้นัยังมี method อีกมากมายทเี่ ราสามารถนาํ มาใชในงานท่เี ก่ียวขอ งกับ string แตเ ราคงไมส ามารถพดู ในทนี่ ้ีไดห มด จงึ เพยี งแตหวงั วาผูอ า นจะทาํ การคน ควา ตอ ไปเพอ่ื ความเขาใจในเรอื่ งทเี่ กีย่ วของกบั stringตอไป ตารางท่ี 4.2 แสดงถึง method ตาง ๆ ของ class StringBufferตาราง 4.2 method ของ class StringBuffermethod ความหมายcapacity() ความจุของ StringBuffer ตวั น้ีlength() ความยาวของ StringBuffer ตัวนี้setLength(new length) กําหนดความยาวของ StringBuffer ดวยความยาวใหมappend(value) เช่ือมคาเขาทางดานหลังของ StringBuffer ตวั น้ีinsert(index, value) เพิ่มคา เขาสู StringBuffer ณ ตําแหนง ทีก่ าํ หนดreplace(start index, end index, String) เปลีย่ นคา ตามจดุ ทีก่ ําหนด ดว ย Stringdelete(start index, end index) ลบคา ออกตามจดุ ท่ีกําหนดdeleteCharAt(index) ลบตวั อกั ษรตามจุดท่ีกําหนดsetCharAt(index, character) เปล่ยี นตวั อกั ษร ณ ตําแหนงทกี่ าํ หนดcharAt(index) คา ตัวอักษร ณ ตาํ แหนงทก่ี ําหนดsubstring(index) คา substring ตามจดุ เริ่มตนท่ีกําหนดจนจบ Stringsubstring(start index, end index) คา substring ตามจดุ ทีก่ าํ หนดเทานนั้toString() object ทม่ี คี าของ String ท่ีอยใู น StringBufferreverse() สลบั ตวั อกั ษรทกุ ตวั ใน StringBufferการกาํ หนดใหขอ มูลของ array เปน string (Array of Strings)เนือ่ งจากวา string เปน object ดงั นัน้ เราจึงสามารถทจ่ี ะเกบ็ string ไวใ น array ได การจดั เกบ็ stringไวใ น array กไ็ มยุง ยาก กค็ ลา ย ๆ กับท่ีเราเก็บขอมูลชนดิ อืน่ ไวใน array น่นั เอง มาถึงตอนนถ้ี าเราลองมองยอนกลบั ไปดกู ารประกาศ method main() ของเรา เราจะเหน็ การประกาศแบบน้ีpublic static void main(String[] args) { …ภายในเคร่อื งหมาย () เราจะเห็นการประกาศ String [] args ซึ่งเปน การประกาศใหต วั แปร args เปน ตัวแปรท่ีใชเก็บ array of strings ซ่งึ การประกาศนก้ี ็เหมอื นกับการประกาศ array โดยทวั่ ไปเพยี งแตเราเปล่ียนใหการจดั เก็บขอ มลู มาเปน string เทาน้ันเอง ลองมาดูโปรแกรมตัวอยางการสราง array ofstrings กนั ดู//ArrayOfStrings.javaimport java.io.*; ภาควิชาคอมพิวเตอรธ รุ กิจ วทิ ยาลัยฟารอ ีสเทอรน

บทที่ 4 การใช Array และ String 130เรมิ่ ตนกบั Javaclass ArrayOfStrings { public static void main(String[] args) { //declare array of 5 strings String[] names = new String[5]; //initialize array names[0] = \"Kafe\"; names[1] = \"River Side\"; names[2] = \"Good View\"; names[3] = \"Cottage\"; names[4] = \"Club G\"; String word = names[2].substring(0, 4); System.out.println(\"First word from names[2] is \" + word); for(int i = 0; i < 5; i++) { System.out.println(names[i]); } }}เราไดประกาศให names เปน array of Strings ทส่ี ามารถเก็บขอ มลู ไดสูงสุด 5 ตวั ดวยคาํ สง่ัString[] names = new String[5];หลงั จากน้ันเรากใ็ สขอ มลู ใหกบั ตําแหนง ตาง ๆ ของ array names และเมือ่ ใสค รบแลว เราดึงเอาคําแรกท่ีอยูใ น names[2] มาแสดง เมอ่ื เสร็จแลวเรากแ็ สดงขอ มลู ท้ังหมดไปยังหนาจอ ดว ยการใช for – loopผลลพั ธข องการ run คอืFirst word from names[2] is GoodKafeRiver SideGood ViewCottageClub Gโปรแกรมตัวอยา งทเ่ี ห็นเปนโปรแกรมอยา งงาย ทีเ่ ขียนขนึ้ มาเพ่อื แสดงการใช array of Stringsกระบวนการตาง ๆ ที่สามารถทําไดกบั array โดยท่ัวไปกส็ ามารถทาํ ไดก บั array of Strings ดงั นั้นผอู า นควรยอนกลับไปดเู รอื่ งของ array ทเี่ ราไดพดู ถึง และลองประยุกตใ ชกระบวนการตา ง ๆ กบั array ofStrings ดูเพอ่ื ใหเ กิดความเขาใจมากย่ิงขน้ึสรปุในบทนเ้ี ราไดพดู ถงึ การเก็บขอ มลู ดว ย array การใช String และ StringBuffer รวมไปถึงกระบวนการตางๆ ท่ีเราสามารถทาํ ไดกบั ตวั แปร หรือ object ตา ง ๆ ท่ีเกิดจาก class String และ class StringBufferผูอา นควรทําความเขา ใจกบั method ตาง ๆ ที่เราไดพดู ถึงเพ่อื การนาํ ไปใชอ ยา งมปี ระสทิ ธภิ าพ จุดหลักๆ ทเ่ี ราไดพ ดู ถงึ คอื9 การสราง array ในการเก็บขอ มลู ชนดิ เดียวกนั หลายตัวไวใ นตัวแปรตัวเดยี ว9 การเขาหาขอ มลู แตล ะตัวใน array ดว ยการใช index9 ขนาดของ array สามารถดึงออกมาจากตัวแปรคงท่ี length9 Array สามารถทจี่ ะเก็บขอ มูลทีเ่ ปน array ได9 เราสรา ง object ท่เี ปน string จาก class String พรอมทงั้ กําหนดคา ทีไ่ มส ามารถเปลย่ี นแปลงได9 ขนาดของ string ตอ งดึงออกมาจาก method length()9 String มี method หลาย ๆ ตัวใหเ ราใชใ นการจดั การกับ string9 เราสรา ง string ท่สี ามารถเปลย่ี นแปลงไดจ าก class StringBuffer ภาควิชาคอมพิวเตอรธรุ กิจ วทิ ยาลัยฟารอ สี เทอรน

บทที่ 4 การใช Array และ String 131เรม่ิ ตนกบั Java9 StringBuffer มี method หลายตวั ทเี่ ราเรยี กใชในการจัดการกบั string ตาง ๆ9 ขนาดของ string จาก class StringBuffer หาไดจ าก method length() และความจขุ อง object ทมี่ าจาก StringBufer หาไดด ว ยการเรยี กใช method capacity()แบบฝก หดั1. จงเขียนโปรแกรมทร่ี บั ขอ มลู ทเี ปน int จาก keyboard จํานวน 10 ตัว เกบ็ ไวใ น array พรอ มทงั้ หา คาสูงสดุ คา ตา่ํ สดุ จาํ นวนของขอ มูลท่เี ปนเลขคที่ ้งั หมด และจํานวนของขอมลู ทเ่ี ปนเลขคทู ั้งหมด2. จงเขียนโปรแกรมทใี่ ช Math.random() ในการสรางขอ มลู จาํ นวน 100 ตวั เกบ็ ไวใ น array ใหแสดง ขอมลู ทั้งหมดไปยงั หนา จอโดยใหม จี ํานวนขอ มูลเปน 5 แถว ๆ ละ 20 ตวั3. จงเขยี นโปรแกรมทสี่ รา ง array 2 มติ ิขนาด 3 x 3 จํานวน 2 ตวั ทมี่ ขี อ มูลเปน int ใหใ สขอมูลใน array ดวยการใช Math.random() ทก่ี าํ หนดใหค าของขอมูลทส่ี รา งขึ้นอยรู ะหวา ง 1 – 9 หลังจาก นน้ั ใหนําเอา array 2 ตวั นีม้ าบวกกัน (Matrix addition) เก็บผลลพั ธท งั้ หมดท่ไี ดไ วใ น array ตัวท่ี สาม พรอมทัง้ แสดง array ท้ังสามตวั ไปยังหนา จอ4. จงเขียนโปรแกรมทร่ี ับ object จาก class String จํานวนสามตวั จาก keyboard ใหตรวจสอบวา string ตัวไหนใหญท สี่ ดุ และ string ตวั ไหนเลก็ ที่สดุ แสดงผลลัพธไปยงั หนา จอ5. จงเขยี นโปรแกรมทใี่ ช array เก็บ string จํานวน 10 ตัวท่อี ยใู นรปู แบบของ day/month/year เชน 02/10/00 ใหโ ปรแกรมตรวจสอบขอ มลู ทอ่ี ยูใน string ทุกตัว เสร็จแลว ใหสง ผลลพั ธท ง้ั หมดใน รปู แบบของ 2 October 2000 ไปยังหนาจอ6. จงเขยี นโปรแกรมทใี่ ช array ในการเกบ็ char จํานวน 10 ตวั ใหท าํ การ reverse ขอ มลู ทอ่ี ยใู น array นี้ ผลลัพธท ไ่ี ดใหเ ก็บไวใ น array ตวั เดมิ7. จงเขียนโปรแกรมทใ่ี ช StringBuffer เกบ็ string จาํ นวน 10 ตัว ใหนาํ string ทงั้ หมดไปเกบ็ ไวใ น string ตวั ใหมโดยให string ทม่ี จี าํ นวนของ char นอ ยอยทู างดา นหนา และ string ทมี่ ีจาํ นวนของ char มากอยทู างดา นหลัง (เรยี งจากนอยไปหามาก)8. จงเขียนโปรแกรมทใ่ี ช array ในการเก็บชื่อของลูกคา จาํ นวน 20 ช่ือ ใหท าํ การคนหาช่อื ของลูกคาที่มี ตัวอกั ษรขึ้นตน ตามท่ี user เปน ผูก ําหนดจาก keyboard ใหแสดงช่ือทกุ ตวั ท่มี ีอักษรข้นึ ตน ดังกลา ว ออกทางหนาจอ9. กาํ หนดให array1 และ array2 เปน array ทเี่ กบ็ int จาํ นวนเทากับ 10 ตวั โดยท่ี ขอ มลู ของแตล ะ array ไดถูกจดั เรียงใหอยูใ นรปู ของ มากไปหานอย จงเขียนโปรแกรมทน่ี าํ เอาขอ มลู ของ array ทง้ั สองตวั มารวมกนั โดยทย่ี งั รกั ษาคุณสมบตั ิของการเรียงจากมากไปหานอย เก็บไวใ น array ตวั ใหม แสดงผลลัพธข องทง้ั สาม array ออกทางหนาจอ10. จงเขยี นโปรแกรมทร่ี บั String 1 ตวั ท่ีประกอบไปดว ย ชื่อตน และนามสกุลทถี่ ูกแบงดวยชอ งวา ง (space) เชน Micha Sapporo หลงั จากนั้นใหแบง String ตวั นอี้ อกเปน 2 ตัวใหเ ปน ชอ่ื ตน 1 ตัว และนามสกุล 1 ตวั11. จงปรับปรงุ โปรแกรมในขอ 10 ใหท าํ หนา ที่ลบชองวางทอี่ าจนําหนา และตามหลงั ช่อื ทน่ี าํ เขาจาก keyboard12. จงเขียนโปรแกรมทร่ี บั String 2 ตัวจาก keyboard ใหท าํ การคนหาวา String ตวั ทส่ี องมีอยใู น String ตวั แรกหรอื ไม ถามี มอี ยูก่ตี วั อยทู ่ีตาํ แหนงใดบา ง13. จงเขยี นโปรแกรมทรี่ บั String 2 ตัวจาก keyboard ใหนําเอา String ตวั ทส่ี องไปใสไ วใ นตาํ แหนง ที่ ถูกกําหนดจาก user ถาตาํ แหนง ที่ user กําหนดเปนไปไมไดใ หน าํ String นน้ั ไปใสไ วดา นหลังของ String ตวั แรก14. จงเขยี นโปรแกรมทที่ ําหนาทดี่ งั น้ี ภาควิชาคอมพิวเตอรธรุ กจิ วิทยาลยั ฟารอีสเทอรน

บทท่ี 4 การใช Array และ String 132เรมิ่ ตน กบั Javaรับ String ในรปู แบบของ 112 Newell Street, Walla Walla, WA 99210ทําการตดั String ใหอ ยใู นรูปแบบของNo. 112Street: Newell StreetCity: Walla WallaState: WAZip: 9921015. จงเขยี นโปรแกรมทที่ ําการสลบั คําทม่ี อี ยใู น String เชน ถา String เปน I love Chiang Mai ผลลัพธ ทไ่ี ดจากการสลบั จะเปน Mai Chiang love I ภาควิชาคอมพิวเตอรธ รุ กจิ วทิ ยาลัยฟารอสี เทอรน

เราไดเ รยี นรูถงึ โครงสรางหลกั ของการเขียนโปรแกรมโดยทว่ั ไปจากบทกอน ๆ เราไดเ รยี กใช class ตาง ๆ(บาง class) ท่ี Java มีใหใ นการเขยี นโปรแกรม รวมไปถงึ การสรา ง object จาก class String และ classStringBuffer ในบทนี้เราจะมาทาํ ความเขาใจในเรื่องของการสรา ง class การสราง object จาก class ที่เราสรา งขนึ้ การนาํ เอา class มาชวยแกโจทยแ ละปญ หาทางดานคอมพวิ เตอรหลังจากจบบทนีแ้ ลว ผูอา นจะไดรบั ทราบในเร่ืองของ o ความหมายของ class และการสราง class o การสรา ง constructor o การสรา ง method o การ overload method o การสราง object จาก class o การใช attribute ตา ง ๆ ของ class o การสราง nested class o การสรา ง และการเรียกใช packageClass และ การสรา ง classเราไดเ ห็นจากบทกอน ๆ วาเราตองกําหนดโปรแกรมท่ีเราเขียนข้นึ ดว ยคาํ วา class เสมอ แตเ ราไมไ ดพดูถงึ เลยวา class คืออะไร โดยท่วั ไปการเขยี นโปรแกรมดว ยภาษาท่เี รยี กกนั วา Object-OrientedProgramming (OOP) น้ันคําวา class มักจะหมายถึงคุณลกั ษณะ หรอื คณุ สมบัติ (prescription) ของวตั ถุใดวตั ถุหน่งึ (ทเี่ กิดจาก class นั้น ๆ) ซ่ึงถา พดู แบบภาษาชาวบานทั่ว ๆ ไปเราอาจเรยี ก class ดงั กลาววาเปน แมแ บบของ class (อื่น ๆ ท่ีตามมาก็ได) หรอื วาเปนตวั กาํ หนดคณุ สมบตั ิของ object ท่ีไดถูกสรา งขึน้ถา เรามองไปรอบ ๆ ตัวเรา เราจะเห็นวตั ถหุ ลากหลายชนดิ เชน เกา อี้ keyboard ถว ยกาแฟ และอะไรอืน่ๆ อกี มากมาย ซ่งึ วตั ถหุ ลายชน้ิ มีรปู รา งหนาตาเหมือนกัน มีการใชส อยทคี่ ลา ย หรอื เหมือนกนั เชน เกา อ้ีมีส่ีขา หรือสามขา มพี นกั พิง หรอื ไมม พี นักพงิ แตการใชงานเหมือนกันคือ เอาไวนัง่ หรืออีกตัวอยางหนึง่เชน รถยนต มสี ล่ี อ ขับเคลอ่ื นไปไดทั้งขา งหนา และขา งหลงั ตอ งใชน าํ้ มนั เปนเชอื้ เพลิง มสี ีภายนอกท่ีตา งกัน แตมคี ณุ สมบัตทิ ่เี หมอื นกันคือเอาไวเดินทางไปยังที่ตาง ๆ และโดยทั่วไปแลว ผขู บั ขสี่ วนใหญจ ะไมรถู ึงการทาํ งานของเครื่องยนตทีอ่ ยภู ายใน รแู ตเพียงขอมลู ที่จาํ เปนบางสว น เชนเปดประตูอยางไรstart เครอื่ งยังไง เขาเกียรอยางไร อยา งนเี้ ปน ตน การเขียนโปรแกรมในรูปแบบของ OOP กเ็ หมอื นกัน ถาเราพฒั นาโปรแกรมใดสักโปรแกรมหนงึ่ ใหผ อู นื่ ใช ผใู ชก ลมุ นน้ั ไมจ าํ เปนทจ่ี ะตองรวู าเราเขยี นอยางไร ควรรเู พียงแตว าจะใชส วนตา ง ๆ ที่เราเขียนขนึ้ อยา งไร และนาํ กลบั ไปใชใหมไ ดอ ยางไร (เหมอื นเชน ทเี่ ราเรียกใช method ตา ง ๆ จาก class String เราไมรวู าเขาเขียน code อยางไร รูแตวา ใชงานอยา งไร)ถามองกลับไปดู class String ที่เราใชในบทท่ีส่นี นั้ จะเห็นวา เราสามารถทจี่ ะใช method ตาง ๆ ทีม่ โี ดยไมมีการจาํ กัดจาํ นวนครง้ั ท่ใี ช โปรแกรมตัวไหนเรยี กใชก ็ได การทํางานก็ยังคงเหมอื นเดมิ ผลลพั ธของการเรยี กใชกเ็ หมอื นเดิม object ที่มาจาก class String ไมวา จะเปนตัวไหน เรากส็ ามารถทจ่ี ะใช methodตา ง ๆ กับ object เหลา นไี้ ด ในการออกแบบ class นน้ั โดยท่ัวไปเราตอ งออกแบบใหเ หมาะสมกับงานของเรา เชนถา โปรแกรมของเราตองวุนวายกบั คนเรากอ็ าจออกแบบให class ของเรามีคณุ สมบตั แิ ละคณุ ลกั ษณะ ทเี่ กย่ี วของกบั คน เชน มีช่ือ นามสกุล ท่ีอยู สถานะภาพ อาชพี และอะไรอนื่ ๆ ทาํ นองนี้โดยทวั่ ไปการออกแบบ class น้นั มีสวนประกอบทจี่ าํ เปน และ สาํ คัญอยสู องสวน คือ

บทท่ี 5 Objects และ Classes 134เริม่ ตนกบั Javao Field หมายถงึ ตัวแปรสาํ หรับการเก็บขอ มูลของ object ทีบ่ งบอกถงึ ความเหมือน หรือ ความแตกตา ง กันของ object ท่เี กดิ มาจาก class เดียวกัน หนังสือหลายเลม เรียก field ทว่ี าน้ีวา Data member หรอื สมาชกิ ของ class ท่เี ปน ที่เกบ็ ขอมูล หรอื ทเี่ ราเรยี กกันจนคนุ ปากวา variable (identifier)o Method หมายถึงกระบวนการ (operation) ตา ง ๆ ท่เี ราสามารถทาํ ไดก บั object นนั้ ๆ ของ class ซึ่งกระบวนการตา ง ๆ ทที่ ําไดส วนใหญจะกระทาํ กบั data memberField หรือ Data member สามารถที่จะกาํ หนดใหเ ปนขอมลู ไดท กุ ชนิด รวมไปถงึ การเปน ตวั อางองิ(reference) ถงึ object ท่มี าจาก class อ่ืน (เชน ตัวแปรทม่ี ชี นดิ เปน String หรอื array ท่ีเราไดพ ดู ถงึกอนหนา น้)ี หรอื แมแ ตกระท่ังการเปน ตัวอางองิ ถงึ class ของมนั เองMethod จะประกอบไปดว ยช่อื ของ method และชดุ คาํ ส่ังตา ง ๆ ท่ีตัวมันเองมหี นา ทใี่ นการทาํ ตามคุณลกั ษณะท่ีไดถกู ออกแบบไว ซงึ่ โดยสว นใหญจะกระทาํ กบั data member (แตกไ็ มจ าํ เปนเสมอไปเชน ในกรณขี อง method main())เพอ่ื ใหเ ห็นภาพชดั เจนยง่ิ ข้นึ เรามาลองออกแบบ class ขนึ้ มาสัก class หน่งึ ทเ่ี กย่ี วของกับ StudentData member class name Instance variableMethod Class variable class Student { String id; Constructor String firstname; Parameter list String lastName; String dateOfBirth; static int count = 0; Student(String iden, String fName, … … } public int getCount() { return count; } //method ตัวอ่นื ๆ ทเ่ี หลืออยู … … }ภาพท่ี 5.1 ตัวอยา งการสราง class StudentClass Student ทเี่ ราสรา งข้ึนประกอบไปดว ยสวนประกอบสองสวนดงั ทไ่ี ดกลาวไปแลว คือ สว นที่เปนdata member และสวนทเ่ี ปน method ซึง่ ภายในสว นสองสว นน้ี ยงั มีสว นประกอบอน่ื อกี ทมี่ ีความสําคญัตอ การออกแบบ และการใช class กอนอื่นเรามาดสู ว นประกอบของ data member กนัตัวแปรทีเ่ ปน สมาชิกของ class (Class variable และ Instance variable)Object ท่ีเกดิ มาจาก class นนั้ เราเรียกกนั วา instance ของ class และ object นี้จะมสี วนประกอบที่ classมใี ห คือ ตวั แปรตาง ๆ ทีอ่ ยูใน class ตัวแปรเหลา น้จี ะมขี อ แตกตางกัน คอื อาจเปนตวั แปรท่เี ปน classvariable และอาจเปน ตวั แปรทเี่ ปน instance variableหลงั จากทเ่ี ราสราง object แลว object จะไดร บั copy ของตัวแปรท่ี class มใี ห ซง่ึ ตัวแปรเหลา นีจ้ ะเปนตวั บง บอกวา object ตัวไหนแตกตางกนั อยางไร คาของตัวแปรของ object แตล ะตวั จะมคี า เหมือนหรอื ภาควิชาคอมพิวเตอรธรุ กิจ วทิ ยาลยั ฟารอ ีสเทอรน

บทที่ 5 Objects และ Classes 135เริ่มตนกบั Javaแตกตางกนั น้นั ขึน้ อยูกับการกาํ หนดของโปรแกรมเอง เชน ถาเราสรา ง object สองตวั จาก class Studentข้นึ มาใชงาน object สองตวั นจ้ี ะมี copy ของตัวแปรทั้งสต่ี วั ของมันเอง เราเรยี กตัวแปรเหลา น้วี าinstance variableสว นตวั แปรอกี ชนิดหนึง่ คือ class variable น้ันกําหนดไววา object ทุกตวั ทเี่ กดิ จาก class จะใชต ัวแปรชนดิ นรี้ ว มกนั และตวั แปรนสี้ ามารถทจ่ี ะกําหนดและสรางขึน้ มาใชไ ด ถงึ แมว า จะไมม ี object เกดิ ข้นึ จากclass นี้ก็ตาม เพราะวาตวั แปรนี้เปนของ class ดงั น้นั ทั้ง class และ object ก็สามารถทจ่ี ะใชมนั ได ถาคาของตัวแปรน้เี ปลี่ยนไป object หรือ class ทีอ่ า งการใชถ ึงตวั แปรตวั นีก้ จ็ ะไดค า ใหมทีเ่ ปลย่ี นไป ซ่ึงตรงกันขามกับตวั แปรที่เปน instance variable ถา หาก object ตวั ไหนเปล่ยี นคา ของตัวแปรใด ๆ (copy) คา ที่เปล่ยี นไปจะไมม ีผลตอตัวแปรใด ๆ ใน object ตวั อนื่ การประกาศใหต ัวแปรใด ๆ ก็ตามเปน classvariable น้ันเราตองใชค าํ สงั่ static นําหนาตวั แปรนนั้ เสมอ ดงั ท่ไี ดแ สดงในภาพท่ี 5.2class Student { Object ทุกตวั share static int count = 0; ตวั แปร count 0 String id; String firstname; Joe String lastName; id String dateOfBirth; firstNAme lastName dateOfBirth ทงั้ Joe และ Jon มี copy ของตวั แปรเหลาน้ี Jon id firstNAme lastName dateOfBirthภาพท่ี 5.2 การใชตวั แปรแบบ class variable และแบบ instance variableตัวแปรท้งั สองชนิดมกี ารใชท แี่ ตกตา งกัน และตางก็มคี วามสาํ คญั ทง้ั คู โดยทั่วไปการใช class variableนน้ั นยิ มใชใ นกรณีทเี่ ราตองการที่จะเกบ็ คา ท่เี ปนคาที่ object ทง้ั หมดตอ งใชร วมกัน เชน คา คงทต่ี าง ๆ ทม่ี ีความจาํ เปนใน class นนั้ ๆ ตวั อยา งของเราใช count เปนตวั แปรทใี่ ชร วมกนั ระหวา ง object ตาง ๆสว นตวั แปรท่ีเปน instance variable นั้นมคี วามจําเปนอยา งมากในการออกแบบ class ตา ง ๆ ทั้งนเ้ี พราะตัวแปรชนดิ นีจ้ ะเปนผกู าํ หนดความแตกตางระหวาง object ตา ง ๆ ทีไ่ ดถ ูกสรา งขน้ึ จาก class น้ัน ๆ เชนobject จาก class Student ที่ถกู สรา งขนึ้ อาจมี id ทไ่ี มเหมือนกนั ชอ่ื ตน และ ชือ่ สกุลทแี่ ตกตางกัน วนัเดอื นปเกิดท่ไี มเ หมือนกนั อยางนี้เปนตนขอ แตกตา งระหวา ง class กบั objectclass objectƒ เปน แมแบบทมี่ สี มาชกิ ทงั้ data และ ƒ ตองเกิดมาจาก class ใด class หนึ่ง ƒ มตี วั ตนขณะโปรแกรมกําลงั execute method ƒ สามารถเปลยี่ นแปลงคา ของ data ขณะƒ ไมมตี วั ตนขณะทโี่ ปรแกรมกาํ ลัง executeƒ ไมม กี ารเปลีย่ นแปลงขณะโปรแกรม execute execute ภาควิชาคอมพิวเตอรธ รุ กิจ วทิ ยาลัยฟารอสี เทอรน

บทท่ี 5 Objects และ Classes 136เริม่ ตน กบั JavaMethodจากแผนภาพที่ 5.1 เราจะเห็นวามี method อยูใน class Student ของเรา (บางสวน) method เปนกระบวนการ (ทรี่ วบรวมชดุ คําสงั่ ) ที่เราสามารถเรียกใชใ หทํางานตาง ๆ ใหเรา ซึ่งอาจเปน การทํางานท่ีเกยี่ วของกับ ตัวแปรทอี่ ยใู น class หรอื กระบวนการอ่ืน ๆ ทจี่ าํ เปน ของ class นน้ั ๆ และเชน เดียวกันกบั ตวัแปรทไี่ ดก ลา วไวกอ นหนาน้ี method กไ็ ดถ กู แบง ออกเปน สองชนิด คือ class method และ instancemethodClass method กค็ อื method ท่ีสามารถท่ีจะไดร ับการประมวลผลถึงแมว า จะไมมี object อยเู ลย ถา เรามองยอนกลับไปดู method main() ของเรา เราจะเห็นวาไมม ี object ใด ๆ เกิดจาก class ท่ีมี methodmain() อยูเลย และการประกาศใช class method กเ็ ชน เดยี วกนั กับ class variable เราตอ งใชค าํ สั่งstatic นาํ หนาเสมอสวน instance method น้นั เปน method ทต่ี อ งมกี ารใชร ว มกันกับ instance variable ทงั้ นเ้ี พราะวาmethod ประเภทน้ถี กู สรา งขึน้ มาจาก class เดียวกนั กบั ที่ object ถูกสรา งขนึ้ มา การกระทาํ ใด ๆ กต็ ามตองทําผา น instance method เทา นนั้การเขา หาตวั แปร และ method ของ classในการท่ีจะเขาหาตวั แปรหรอื method ของ class นั้นไมว าจะเพ่ืออะไรก็ตามแต เราจะตองเขา หาผา นทางobject ของ class ตามดวย . (dot) และตามดว ยชอื่ ของตวั แปร หรือ ชอื่ ของ method เชนstudentA.firstName;หรือstudentB.getAge();ในตอนน้เี ราจะดูเพียงแคว ธิ กี ารเขา หา แตต อ ไปเราจะดูเรอ่ื งการกําหนดนโยบายของการเขาหาตวั แปรหรือ method เหลา น้ี ถา มี method หรือ ตัวแปรอยเู รากเ็ ขา หาแบบท่ีไดก ลา วมาแลว Java จะฟอ งดว ยerror ถาหากอา งถงึ ตัวแปรหรอื method ท่ไี มไดถกู สรา งขนึ้ เพื่อใหเห็นภาพของการสรา ง class รวมไปถึงสวนประกอบตาง ๆ ของ class เรามาดู class Student ทไี่ ดถูกสรา งขึ้นเพอื่ เปนตัวอยา ง//Student.java - Simple class for studentimport java.lang.Integer;import java.util.Calendar;class Student { String id; //student id String firstName; //student's first name String lastName; //student's last name String dateOfBirth; //student's date of birth in //the form: dd/mm/yyyy static int count = 0; //number of object created //class constructor to initialize fields to given values Student(String iden, String fName, String lName, String dOfB) { id = iden; firstName = fName; lastName = lName; dateOfBirth = dOfB; count++; } //method to return count public int getCount() { ภาควิชาคอมพิวเตอรธ ุรกิจ วทิ ยาลัยฟารอ สี เทอรน

บทท่ี 5 Objects และ Classes 137เริม่ ตน กับ Java return count; } //method to return student's id public String getId() { return id; } //method to returnstudent's first name public String getFirstName() { return firstName; } //method to return student's last name public String getLastName() { return lastName; } //method to return student's date of birth public String getDateOfBirth() { return dateOfBirth; } //method to calculate student's age from //year of birth public int getAge() { //retrieve a year String year = dateOfBirth.substring(6); //convert it to an int int birthYear = Integer.parseInt(year); //get current year from system's calendar Calendar now = Calendar.getInstance(); int thisYear = now.get(Calendar.YEAR); //return the difference return thisYear - birthYear; } //method to display students' info to screen public void display() { System.out.print(getId() + \" \"); System.out.print(getFirstName() + \" \"); System.out.print(getLastName() + \" \"); System.out.println(\"Age: \" + getAge()); }}เราไดกาํ หนดให class Student มี field อยูท ้งั หมด 5 field คอื id, firstName, lastname, dateOfBirth,และ count โดยทส่ี ี่ตวั แรกเปน instance variable ท่ีเอาไวเ กบ็ ขอ มูลโดยเฉพาะของ object แตละตวั ที่ไดถูกสรา งข้ึน และตวั สดุ ทา ยเปน class variable ท่เี อาไวเ กบ็ จํานวนของ object ทไี่ ดถ กู สรางขึ้นเรายังไดส ราง method อีก 7 ตวั ซ่ึงมหี นาทใ่ี นการทาํ งานทต่ี า งกนั โดยเฉพาะ method ทมี่ ีชอ่ื เหมอื นกนักบั class น่ันก็คือ method StudentStudent(String iden, String fName, String lName, String dOfB) { id = iden; firstName = fName; lastName = lName; ภาควิชาคอมพิวเตอรธ ุรกิจ วิทยาลยั ฟารอ ีสเทอรน

บทที่ 5 Objects และ Classes 138เริม่ ตน กับ Java dateOfBirth = dOfB; count++;}Student() เปน method พิเศษทีม่ ีชือ่ เรยี กกนั โดยทัว่ ไปวา เปน constructor ของ class ซง่ึ constructorนี้สว นใหญจ ะทาํ หนาทใ่ี นการกาํ หนดคา เบอ้ื งตนใหก บั object ที่ไดถ กู สรา งขึน้ จาก class เชน กาํ หนดคาใหก ับ field ทุก field หรือบาง field (ท้งั นีต้ องแลว แตก ารออกแบบการทาํ งานของ constructor นั้น ๆ)ตวั อยา งของเรากาํ หนดให constructor ทาํ การกาํ หนดคา ใหก ับ field ทกุ field (ยกเวน class variable ท่ีชือ่ count) ใหม ีคา เปนไปตามคา ทไ่ี ดรบั เขามาจากตัวแปรทอี่ ยใู น parameter list แต constructor จะมีคุณสมบตั ิพเิ ศษคือ การกําหนดคาน้ันจะไดร ับการกระทําโดยอตั โนมตั ิ เราไมต องเรยี กใช constructorการเรยี กใช constructor นี้ Java จะเปน ผเู รียกใหในตอนทเ่ี ราสรา ง object ขึ้นมา กอนท่ีเราจะพดู ถงึconstructor และการถูกเรียกใชง านโดยอตั โนมัตนิ ัน้ เรามาดกู ันถงึ method และ วธิ ีการสรา ง methodรวมไปถึงการสง คาใหก บั method และการสง คากลับของ methodการสรา ง methodในการสราง method นน้ั เราจะตองกําหนดชอื่ ใหกบั method กําหนด parameter (ถามี) กาํ หนดการสงคา กลับของ method (ถามี) โดยทั่วไป method ไดถูกแบง ออกเปนสองแบบ คือ o Method ทสี่ งคา กลับใหแ กผ ทู เี่ รยี กใช method o Method ที่ไมมกี ารสง คา ใด ๆ กลบั ไปใหผ ูเรยี กโครงสรา งของ method โดยทว่ั ไปจะมีรปู แบบดงั น้ีชนดิ ของคาทีส่ งกลับ ชนดิ ของคาที่สงกลบั ช่อื ของ method Parameter (ถา มี)เปน ชนดิ ไหนก็ไดใชค ําส่ัง void ถาไมม ีคาทตี่ อ งสงกลับ returnType methodName( arg1, arg2, …, argn ) { // body of method … … } ชดุ คําส่ังตาง ๆ ที่ method ตวั นี้มีอยู (body of method)ภาพท่ี 5.3 การสราง methodเราลองหยิบเอา method getAge() จาก class Student มาดกู นั เพื่อใหเ กดิ ความเขา ใจในเร่ืองสว นประกอบตาง ๆ ทม่ี ีอยูใน method ท่ีวา น้ีpublic int getAge() { String year = dateOfBirth.substring(6); int birthYear = Integer.parseInt(year); ภาควิชาคอมพิวเตอรธ รุ กจิ วิทยาลัยฟารอ ีสเทอรน

บทท่ี 5 Objects และ Classes 139เริ่มตนกบั Java Calendar now = Calendar.getInstance(); int thisYear = now.get(Calendar.YEAR); return thisYear - birthYear;}ถา เราแยกสว นประกอบตาง ๆ ออก เราก็จะไดขอ มูลดังนี้ชนดิ ของคา ทส่ี ง กลับ intช่อื ของ method คือ getAgeParameter ไมม ีชุดคาํ สั่งคอื String year = dateOfBirth.substring(6); int birthYear = Integer.parseInt(year); Calendar now = Calendar.getInstance(); int thisYear = now.get(Calendar.YEAR); return thisYear - birthYear;ถา สงั เกตใหด จี ะเห็นวา ดานหนา สุดของ method getAge() จะมีคําวา public อยู คําวา public น้จี ะเปนตัวกาํ หนดนโยบายการเขาหา method ซง่ึ เราจะไดพดู ถงึ ในตอนตอไป แตต อนนเี้ ราจะดเู ฉพาะสว นประกอบโดยท่ัวไปที่ method ตอ งมีสวนประกอบทสี่ าํ คญั อกี สว นหน่ึงก็คอื คาํ วา return ในบรรทดั สดุ ทา ย เน่อื งจากวา method getAge()ของเราตองสงคากลบั ดังน้ันเราจงึ จําเปน ทีจ่ ะตองบอกให Java รูวาเรามคี า ที่ตอ งการสงกลับ ดงั ทไ่ี ดประกาศไว ถา หากวาเราไมม กี ารใช return พรอ มท้งั คา ทต่ี อ งการสง กลับ Java ก็จะฟองดวย error ตอนทเ่ี รา compile โปรแกรมเรามาลองดู method ทีไ่ มม กี ารสง คา กลบั ใน class Student ของเรา ซงึ่ มอี ยเู พยี งตัวเดยี ว คือpublic void display() { System.out.print(getId() + \" \"); System.out.print(getFirstName() + \" \"); System.out.print(getLastName() + \" \"); System.out.println(\"Age: \" + getAge());}ชนิดของคาทสี่ ง กลบั ไมม ีชอ่ื ของ method คือ displayParameter ไมมีชุดคาํ สง่ั คือ System.out.print(getId() + \" \"); System.out.print(getFirstName() + \" \"); System.out.print(getLastName() + \" \"); System.out.println(\"Age: \" + getAge());Method display() ทาํ หนาทเ่ี ปน เพียงตวั แสดงขอมูลของ object ทเี่ กิดจาก class Student ออกทางหนา จอ โดยการเรียกใช method อ่ืน ๆ ท่ีมอี ยูใน class Student การท่จี ะให method ไมต องสง คา กลบันนั้ เราตอ งใช คําวา void นาํ หนาชื่อ method เสมอ และ method ทม่ี คี ําวา void นาํ หนา ตองไมม คี าํ วาreturn ใด ๆ ทมี่ ีคาในการสง กลบั ยกเวนคําวา return ที่ตามดวย ; (semicolon) เทานนั้ เชน ถาเราใชvoid เรากส็ ามารถท่จี ะใช return ตามดว ย ; หรือไมใ ชเลย อยางใด อยา งหน่ึง เพราะฉะนน้ั methoddisplay() ท่เี หน็ ก็สามารถท่จี ะเขยี นไดอีกแบบหนงึ่ ดงั น้ีpublic void display() { System.out.print(getId() + \" \"); System.out.print(getFirstName() + \" \"); System.out.print(getLastName() + \" \"); System.out.println(\"Age: \" + getAge()); ภาควิชาคอมพิวเตอรธ ุรกิจ วทิ ยาลัยฟารอ สี เทอรน

บทท่ี 5 Objects และ Classes 140เริ่มตน กับ Java return ;}ขอ แตกตางระหวาง method ท่ีสงคา และ method ทไี่ มส งคาmethod ทสี่ งคา method ทไ่ี มส ง คาƒ มคี าํ วา return และ คา ทตี่ องสง กลบั ƒ ไมจ ําเปน ตองมคี าํ วา return แตถ ามจี ะตอ งƒ ขึ้นตน method ดว ยชนิดของขอมูลทต่ี อง ตามดว ย ; อยางเดยี วเทา นัน้ สงกลับ ƒ ขึน้ ตน method ดว ยคาํ วา void เสมอกระบวนการทเ่ี กดิ ขน้ึ เมอื่ มกี ารใช parameter listเราลองมาดโู ปรแกรมตวั อยางทีม่ กี ารสรา ง method ท่มี ีการใช parameter list กอ นที่เราจะกลับมาดูclass Student อกี ครง้ั หน่งึ//Parameters.javaclass Parameters { public static void main(String[] args) { double radius = 2.0;double area = findArea(radius); System.out.println(\"Area of a circle is : \" + area);} public static double findArea(double r) { return Math.PI * r * r; }}โปรแกรม Parameters.java สรา ง method ทเี่ ราเรียกวา class method ขึน้ มาใชง านหนึง่ ตวั (การประกาศให method เปน class method กเ็ หมอื นกบั การประกาศใหต วั แปรเปน class variable เราตอ งใชคาํ วา static นําหนา ) ซงึ่ method นี้มหี นาทีใ่ นการคาํ นวณหาพ้นื ที่ของวงกลมทีม่ รี ัศมที ่ีกาํ หนดไวในตวั โปรแกรม (ในทีน่ คี้ อื 2) method findArea() มี Parameter หน่งึ ตัวท่มี ชี นดิ เปน double และจะสงคาของพื้นทที่ ค่ี ํานวณไดกลับไปใหผ เู รียก ซง่ึ ในทน่ี ีค้ อื class Parameters การเรยี ก method findArea(()น้นั เราเรียกดว ยประโยคdouble area = findArea(radius);ซึ่งเมอ่ื Java เหน็ การเรียกเชน นี้ Java ก็จะไป execute method findArea() ดวย parameter ทม่ี ีชนดิเปน double และสงคา 2.0 ไปให หลังจากที่คํานวณคาพนื้ ท่ีไดแลวกจ็ ะสง กลบั ออกมา และนาํ ไปเก็บไวในตวั แปรช่อื area ภาพที่ 5.4 แสดงการสง คา ผานทาง parameter list ภาควิชาคอมพิวเตอรธ ุรกิจ วทิ ยาลยั ฟารอ สี เทอรน

บทที่ 5 Objects และ Classes 141เรมิ่ ตนกับ Javaclass Parameters { คาของ radius จะถกู สง public static void main(String[] args) { เขา มาไวในตัวแปร r double radius = 2.0; double area = findArea(radius); … …} … …ชนิดของคาท่ีสงกลับ public static double findArea(double r) {ออกมา ตองเปน ชนดิ return Math.PI * r * r;เดียวกัน } คา ทไ่ี ดจากการคาํ นวณจะถูก สงไปให ตวั แปร areaภาพที่ 5.4 การสง parameter ใหกบั method และการสงคา กลับออกจาก methodการสง คาผา นทางตวั แปรทอ่ี ยใู น parameter list นัน้ มีอยสู องแบบคือ 1) การสง ทเ่ี รยี กวา pass-by-valueหรอื การสง เฉพาะคาเขาไปใน method นัน้ ๆ และ 2) การสงแบบท่เี รยี กวา pass-by-reference ในการสงคา ทีเ่ ปน primitive type นน้ั Java จะกาํ หนดใหการสง เปนแบบ pass-by-value เทา นั้น ซง่ึ ไดแสดงไวในภาพที่ 5.5class PassByValue { total public static void main(String[] args) { 10 int total = 10; copy ของ total … 10 … int newTotal = increment(total); … } … การประมวลผลทาํ public static int increment(int sum) { กับ copy ของ sum += 10; total return sum; } ตวั แปร sum อา ง ถึง copy ของ total ทอี่ ยใู น main()ภาพท่ี 5.5 การสง คาแบบ pass-by-valueตวั แปร total ทอี่ ยใู น method main() นั้นจะไมไดร บั ผลกระทบจากการเปลยี่ นคา ท่เี กิดข้ึนภายในmethod increment() ทัง้ นีก้ ็เพราะวา กระบวนการท่ีเกดิ ข้ึนไมไดก ระทํากับตัวแปร total แตเปนการกระทาํ กับ copy ของ total ภาควิชาคอมพิวเตอรธรุ กจิ วิทยาลยั ฟารอสี เทอรน

บทท่ี 5 Objects และ Classes 142เริ่มตนกบั Javaการสง คาไปยงั method แบบ pass-by-value น้คี าทีส่ ง เขาไปจะถกู นําไปใชภายในตวั method เทา นนั้การเปลีย่ นแปลงใด ๆ ท่เี กดิ ขน้ึ จะไมม ีผลกระทบกบั ตัวแปรทเี่ ปนเจาของคานั้น ภายนอก method เลย ซึง่ตรงกนั ขามกับ การสงคา ในแบบท่เี รยี กวา pass-by-reference ลองมาดตู วั อยา งโปรแกรมการสงคา แบบpass-by-value กนั//PassByValue.javaclass PassByValue { public static void main(String[] args) { int total = 10; System.out.println(\"Before calling: total is \" + total); System.out.println(\"Value returns from increment() is \" + increment(total)); System.out.println(\"After calling: total is \" + total); } public static int increment(int sum) { sum += 10; return sum; }}ผลลัพธท ่ีไดจ ากการ run คือBefore calling: total is 10Value returns from increment() is 20After calling: total is 10increment() ถกู เรียกภายใน main() จากประโยค System.out.println(\"Value returns fromincrement() is \" + increment(total)); ซง่ึ มีการสง คาของ total ไปให (ซ่งึ มคี าเปน 10) คานถี้ กูนาํ ไปใชใน increment() ผานทางตวั แปรทชี่ อ่ื วา sum ภายใน increment() ตวั แปร sum ถกู เปลยี่ นคาดว ยการนําเอา 10 ไปบวกเพิ่ม ทําให sum มีคา เปน 20 ซงึ่ คานีจ้ ะถูกสง กลับไปยัง main() ทําใหการแสดงผลทางหนาจอมีคา เปน 20 แตห ลงั จากนัน้ เรากําหนดใหมีการแสดงคาของ total อีกคร้งั หนงึ่ ซงึ่ผลลพั ธท ไ่ี ดค อื คาของ total ยงั คงเปน 10 อยู จะเห็นวา คา ของ total ทไ่ี ดร ับการเปล่ียนแปลงภายในincrement() (ผานทางตวั แปร sum) ไมม ีผลตอ ตัวแปร total อยางใดเลย การเปลีย่ นแปลงเกดิ และตายภายใน increment() เทา น้นั เรามาลองดูโปรแกรมตวั อยางอกี โปรแกรมหนึง่//PassByValue2.javaclass PassByValue2 { public static void main(String[] args) { String myString = \"Business Computers\"; System.out.println(\"Before string is: \" + myString); changeString(myString); //calling changeString() System.out.println(\"After myString is: \" + myString); } public static void changeString(String string) { System.out.print(\"\tInside changeString(), \"); System.out.println(\"myString is: \" + string); string = \"at Far Eastern College\"; ภาควิชาคอมพิวเตอรธ รุ กจิ วทิ ยาลัยฟารอ ีสเทอรน

บทท่ี 5 Objects และ Classes 143เรม่ิ ตน กบั Java }}โปรแกรม PassByValue2.java สรา ง string หนง่ึ ตวั มขี อความวา \"Business Computers\" และสง stringนี้ไปให method changeString() ซ่ึงทาํ หนาทใี่ นการเปลีย่ นคา ของ string ทส่ี งเขา มาใหเ ปน \"at FarEastern College\" แตหลังจากท่ีเรา run โปรแกรมดู เรากไ็ ดผ ลลัพธตามทเี่ ห็นดานลา งนี้Before string is: Business Computers Inside changeString(), myString is: Business ComputersAfter myString is: Business Computersจะเหน็ วา การเปลี่ยนแปลงคา ของ string ทส่ี งผา นเขา มานั้นจะเปน เพียงการเปลี่ยนแปลงแบบช่ัวคราวเทานน้ั การเปล่ียนแปลงเกิดข้ึนภายใน changeString() และไมมีผลกระทบใด ๆ กับคา ของตัวแปรmyString แตอยางใดเลยการสงคา แบบอา งอิง pass-by-referenceการสง คาแบบ pass-by-reference นัน้ ส่งิ ทเ่ี ราสง เขา ไปใน method น้ันไมใ ชคา ของตวั แปร แตเ ปนตวั อา งอิงถงึ ตวั แปร หรอื object นนั้ ๆ โดยตรง เราอาจพดู ไดว าสิง่ ท่ีเราสง ไปนั้นเปนที่อยู หรอื addressของตวั แปร หรอื object นั้น ๆ กไ็ ด เรามาลองดูตัวอยา งการสงแบบ pass-by-reference กันในภาพที่5.6public static void main(String[] args) {Circle red = new Circle(5.0); … … … ท้ัง red และ Circle objectred.change(red, 2.0); copy ของ red Radius: 5.0 ตางกอ็ างถึง … copy of red reference สราง copy object เดิม ของ red red reference copy made ประโยค c อา งถึง c.changeRadius(radius) copy ของ ทาํ การเปลย่ี นแปลงขอมลู ของ object เดิมผานทาง red copy ของ red public Circle change(Circle c, double radius) { c.changeRadius(radius); return c; }ภาพท่ี 5.6 การสงแบบ pass-by-referenceตัวอยา งการสงแบบ pass-by-reference ทเี่ หน็ ในภาพที่ 5.6 นน้ั เราสรา ง object จาก class Circle หนง่ึตัว โดยใหมชี ่อื วา red และมี radius เทา กับ 5.0 เราเรยี ก method change() ผานทาง object red ดวยการสง object red และคา ใหมของ radius ไปให เม่ือ method change() ถูกเรยี กดว ย parameterดังกลา ว Java จะทาํ การสราง copy ใหก ับ red และจดั เก็บ copy น้ีไวที่ c เนือ่ งจากวา ท้งั red และ c ตา งกอ็ า งถงึ object ตวั เดียวกัน ดงั นน้ั การเปลยี่ นแปลงใด ๆ ทเ่ี กดิ ขึ้นยอ มมผี ลกระทบตอ object ตัวเดิมทท่ี งั้red และ copy ของ red อางถึง (หรอื เปน ตัวแทนอย)ูเราไดส ราง method changeRadius() ขึ้นมาเพอ่ื ใชในการเปลี่ยนคาของ radius ซงึ่ code ทั้งหมดของโปรแกรมตวั น้ี มดี ังน้ี ภาควิชาคอมพิวเตอรธ ุรกิจ วทิ ยาลยั ฟารอ สี เทอรน

บทที่ 5 Objects และ Classes 144เริม่ ตน กบั Java//PassByReference.java//a Circle class to demonstrate pass-by-reference schemeclass Circle { private double radius; //a radius of a circle//constructor to initialize radiusCircle(double r) { radius = r;}//method to calculate area of a circlepublic double area() { return Math.PI * radius * radius;}//a method to change radius of a given circlepublic Circle change(Circle c, double radius) { c.changeRadius(radius); //calling method changeRadius() return c; //with a given radius}//a method to change a given radiusprivate void changeRadius(double r) { radius = r;} //a method to return radius public double getRadius() { return radius; }}//a class to test pass-by-reference schemeclass PassByReference { public static void main(String[] args) { //create a red circle with a radius of 5.0; Circle red = new Circle(5.0); //calculate area of a red circle double area = red.area(); System.out.println(\"Radius of red circle is \" + red.getRadius()); System.out.println(\"Area of red circle is \" + area); //change radius of a red circle red.change(red, 2.0); area = red.area(); System.out.println(\"Radius of red circle now is \" + red.getRadius()); System.out.println(\"Area of red circle now is \" + area); }}เรามี class อยสู อง class โดยที่ class ตัวแรก หรอื class Circle เปน class ทเ่ี อาไวใชส รา งวงกลม ตา ง ๆรวมไปถงึ method หรอื กระบวนการตา ง ๆ ทเ่ี ราตองการใชใ นการเปลี่ยนแปลง หรือกําหนดคา ใหก บั ภาควิชาคอมพิวเตอรธรุ กิจ วิทยาลยั ฟารอ สี เทอรน

บทท่ี 5 Objects และ Classes 145เรมิ่ ตน กบั Javaวงกลมนนั้ ๆ สว น class ตวั ทส่ี องเปน class ท่ใี ชสําหรับการทดสอบ การสรา ง object จาก class Circleและตรวจสอบการสงคา แบบ pass-by-reference หลงั จากทท่ี ดลอง run เรากไ็ ดผ ลลพั ธด งั น้ีRadius of red circle is 5.0Area of red circle is 78.53981633974483Radius of red circle now is 2.0Area of red circle now is 12.566370614359172จากผลลพั ธเราจะเห็นวา ประโยคท่ีแสดงคาของ radius น้ันแสดงคา ไดถ กู ตอ งทัง้ กอน และหลังการเปลี่ยนแปลงคา ของ radiusสิ่งทเ่ี ราตอ งจําไวในเรอื่ งของการสงคาใหก บั method ก็คือ การสง คา ที่เปน primitive type เชน int หรอืdouble น้ัน method จะไดรับแตเ พยี งคา เทานัน้ การเปลีย่ นแปลงใด ๆ ภายใน method จะไมม ผี ลกระทบตอ ตวั แปรดานนอก แตถา เราสง object ไปให method การเปล่ียนแปลงทีเ่ กิดขึน้ ภายใน method (ตอตัวแทนของ object นัน้ ๆ) จะมผี ลกระทบตอ object ท่ีอยภู ายนอกดวยสมมตวิ าเราตอ งการที่จะทาํ การสลับคาของตวั แปรสองตวั ผา นทาง method เราจะทาํ อยา งไร? เรามาลองดตู ัวอยา งแรกกนั กอ นวา จะทาํ ใหเ ราไดห รอื ไม//Swap.javaimport java.io.*;class Values { int val1; int val2; //default constructor Values() { val1 = val2 = 0; } //assignment constructor Values(int a, int b) { val1 = a; val2 = b; } //display val1 and val2 public void show() { System.out.println(\"(\" + val1 + \", \" + val2 + \")\"); }}class Swap { public static void main(String[] args) { //create two objects from Values Values obj1 = new Values(10, 20); Values obj2 = new Values(30, 50); obj1.show(); //display values of obj1 obj2.show(); //display values of obj2 swap(obj1, obj2); //swap contents of obj1 and obj2 obj1.show(); obj2.show(); ภาควิชาคอมพิวเตอรธุรกิจ วทิ ยาลยั ฟารอสี เทอรน


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