บทที่ 5ข้อมูลชนิดอาร์เรย์และสตริง
TRANSCRIPT
![Page 1: บทที่ 5ข้อมูลชนิดอาร์เรย์และสตริง](https://reader033.vdocuments.us/reader033/viewer/2022060118/558bef95d8b42a4a778b45ad/html5/thumbnails/1.jpg)
อารเรย (Array)
อารเรย (Array) เปนตวแปรชดใหส าหรบเกบขอมลทมความสมพนธกน โดยจะเกบไวในชอ
เดยวกน
สมาชกแตละตวของ Array จะเรยกวา Element หรอ Cell ตวเลขทใชระบต าแหนงสมาชกของ Array เรยกวา Index หรอ Subscript
![Page 2: บทที่ 5ข้อมูลชนิดอาร์เรย์และสตริง](https://reader033.vdocuments.us/reader033/viewer/2022060118/558bef95d8b42a4a778b45ad/html5/thumbnails/2.jpg)
อารเรยหนงมต มโครงสรางเทยบเทาเมตรกซขนาด nx1 การประกาศตวแปร
อารเรย จะใชเครองหมาย [ ] ลอมคาตวเลขจ านวนเตม เพอบอกจ านวนหนวยขอมลทตองการไดในรป
ชนดของตวแปร ชอตวแปร[จ านวนสมาชกทตองการ]
data_type variable_name [ number-of-elements ]
เชน int a[5];
double x, y[10], z[3];
![Page 3: บทที่ 5ข้อมูลชนิดอาร์เรย์และสตริง](https://reader033.vdocuments.us/reader033/viewer/2022060118/558bef95d8b42a4a778b45ad/html5/thumbnails/3.jpg)
อารเรยหลายมต (Multi-dimensional array) คอ อารเรยทมสมาชกเปนขอมลอารเรย นนคอ ในหนวยขอมลแตละหนวยของอารเรย
จะเปนอารเรยยอยๆ ซงอาจจะก าหนดซอนลงไปไดหลายช น
การก าหนดอารเรยหลายมต จะกระท าในรป
ชนดตวแปร ชอตวแปร[จ านวนสมาชก][จ านวนสมาชก]….; การประกาศอารเรยหลายตวท าไดดงน
int [] abc , xyz; abc = new int[500]; xyz = new int[10]; หรอเขยนรวมกนไดดงน
int[] abc = new int[500], xyz = new int[10];
![Page 4: บทที่ 5ข้อมูลชนิดอาร์เรย์และสตริง](https://reader033.vdocuments.us/reader033/viewer/2022060118/558bef95d8b42a4a778b45ad/html5/thumbnails/4.jpg)
™ สามารถประกาศตวแปร Array พรอมกบก าหนดคาเรมตนใหกบ
สมาชก Array ไดโดยมรปแบบ
ดงน
ชนดของตวแปรอารเรย ชออารเรย[จ านวนขอมล] = {คาคงท,คาคงท
,…};
![Page 5: บทที่ 5ข้อมูลชนิดอาร์เรย์และสตริง](https://reader033.vdocuments.us/reader033/viewer/2022060118/558bef95d8b42a4a778b45ad/html5/thumbnails/5.jpg)
เราสามารถใชค าส งวนรอบ for ในการวนรอบรบคาทปอนเขามาและใชใน
การค านวณโดยการใชตวแปรในการวนรอบ และใชตวแปรเดยวกน เพอก าหนด
ล าดบของขอมลทจะใชในอารเรย
int x,a[5]; for (x=0; x<5; x++) { printf(“Enter value for a[%d]:”,x); scanf(“%d”,&a[x]); } printf(“Show all values\n”); for (x=0; x<5; x++) { printf(“a[%d] = %d”, x, a[x]); }
![Page 6: บทที่ 5ข้อมูลชนิดอาร์เรย์และสตริง](https://reader033.vdocuments.us/reader033/viewer/2022060118/558bef95d8b42a4a778b45ad/html5/thumbnails/6.jpg)
สามารถแบงไดเปน 2 ลกษณะ
™ 1. การสงผานคาอลเมนตอารเรยใหกบฟงกชน เปนการเรยกใช ฟงกชนแบบ Call-by-value
™ 2. การสงอารเรยทกอลเมนตใหกบฟงกชน เปนการเรยกใช
ฟงกชนแบบ Call-by-reference
![Page 7: บทที่ 5ข้อมูลชนิดอาร์เรย์และสตริง](https://reader033.vdocuments.us/reader033/viewer/2022060118/558bef95d8b42a4a778b45ad/html5/thumbnails/7.jpg)
™ ใชวธการสงคาของตวแปร (value) ใหกบฟงกชน โดยผานพารามเตอร ™ ไมสามารถแกไขคาของอารกวเมนต(หรอพารามเตอร) ภายในฟงกชนได = การแกไขคา
ตางๆในฟงกชน ไมมผลตอตวแปรทสงคามา
™ ใชกบฟงกชนทรบคาเขาเปนตวแปรธรรมดา (int, float, char,...) ™ เชน void triple(int x)
{ x=x*3; printf(“x = %d”,x); }….
™ int x=5, y[2]={10,11};triple(x); triple(y[0]);
™ triple(x) สงคา 5 ใหกบฟงกชน ในฟงกชน x เรมตนเปน 5 ™ และถกท าใหกลายเปน 15 หลงจบฟงกชน คา x นอกฟงกชน
ไมเปลยนแปลง
™ triple(y[0]) สงคา 10 ใหกบฟงกชน ในฟงกชน x เรมตนเปน 10 ™ และถกท าใหกลายเปน 30 หลงจบฟงกชน คา y[0] ยงเหมอนเดม
![Page 8: บทที่ 5ข้อมูลชนิดอาร์เรย์และสตริง](https://reader033.vdocuments.us/reader033/viewer/2022060118/558bef95d8b42a4a778b45ad/html5/thumbnails/8.jpg)
™ ™ ใชวธการสงคา แอดเดรส (Address)*** ของตวแปรไปให
ฟงกชน
™ ใชกบฟงกชนทรบคาเขาเปนอารเรย
™ สามารถแกไขคาของอารกวเมนตภายในฟงกชนได = การแกไข
คาตวแปรอารเรย ภายในฟงกชน มผลการเปลยนแปลงตอตวแปรทสงคามา
เพราะ การมการจดการคาของหนวยความจ าในต าแหนงเดยวกน
™ ***แอดเดรส (Address) คอ คาทใชอางถงตวขอมลภายในหนวยความจ า เหมอนกบหมายเลขบานเลขท**
![Page 9: บทที่ 5ข้อมูลชนิดอาร์เรย์และสตริง](https://reader033.vdocuments.us/reader033/viewer/2022060118/558bef95d8b42a4a778b45ad/html5/thumbnails/9.jpg)
™ ™ อารเรยสามารถเกบ reference ของ Object ได โดยก าหนดใหอาเรย
เปน Class นน ๆ ในตอนประกาศอาเรย มรปแบบดงน
™ ™ className [] arrayName = new className[size]; ™ เชน
™ Student [] studentList = new Student[10];
™ ™ Student [] studentList = new Student[3]; ™ studentList[0] = new Student(); ™ studentList[1] = new Student(); ™ studentList[2] = new Student();
![Page 10: บทที่ 5ข้อมูลชนิดอาร์เรย์และสตริง](https://reader033.vdocuments.us/reader033/viewer/2022060118/558bef95d8b42a4a778b45ad/html5/thumbnails/10.jpg)
™ ™ โดยสรป ส าหรบอารเรยสองมต เมออางชออารเรย จะหมายถง
ต าแหนงเรมตนของอารเรยท งหมด (อารเรย 2 มต) ™ เมออางชออารเรยพรอมสมาชกหนงอนดบ จะหมายถงต าแหนง
เรมตนของอารเรยยอยภายใน (อารเรย 1 มต) ™ เมออางชออารเรยพรอมคาสองอนดบ จะหมายถง ขอมลภายใน
อารเรย
![Page 11: บทที่ 5ข้อมูลชนิดอาร์เรย์และสตริง](https://reader033.vdocuments.us/reader033/viewer/2022060118/558bef95d8b42a4a778b45ad/html5/thumbnails/11.jpg)
™ ใชลป for 2 ชน โดยลปช นนอกวนรอบตามจ านวนแถว สวนลปช นใน
วนรอบตามจ านวนหลก
™ ตองมตวนบ 2 ตว คอ ตวนบแถวและตวนบหลก
™ ตวอยางเชน
™ int i,j,x[2][3]; ™ for(i=0;i<2;i++) ™ for(j=0;j<3;j++) ™ x[i][j] = i+j; ™การใหคาเรมตน (Array Initialization) · เราจะใชกลมคาคงททมสมาชกเปนกลมคาคงทยอย ซงเปนชนดเดยว กน
และมขนาดเทากน รวมถงสอดคลองกบชนดของอารเรยดวย
· โดยใชเครองหมาย {} หรอ , ในการแบงแยกแตละแถว
![Page 12: บทที่ 5ข้อมูลชนิดอาร์เรย์และสตริง](https://reader033.vdocuments.us/reader033/viewer/2022060118/558bef95d8b42a4a778b45ad/html5/thumbnails/12.jpg)
ในภาษา Java มกลมคลาสทเรยกวา คอลเลกช น (Collection) ซงออบเจกตจากคลาสนสามารถใชสะสมออบเจกตตาง ๆ ไวได เชน Class ArrayList ดกวา Array ทสามารถเพมสมาชกได โดยไมตองประกาศไวลวงหนา
การใช Class ArrayList จะตอง import java.util.ArrayList
ตวอยางการสรางออบเจกต จาก Class ArrayList Method ทส าคญของ ArrayList ™ -add(int index,Object obj) ใชใสออบเจกตลงในอารเรยท
ต าแหนง index ™ -remove(int index) น าออบเจกตต าแหนง index ออกจากอารเรย
™ -get(int index) คนคาออบเจกตในต าแหนง index ™ -indexof(Object obj) คนคา index ของออบเจกตทระบ
™ -size ส าหรบหาขนาดของ ArrayList
![Page 13: บทที่ 5ข้อมูลชนิดอาร์เรย์และสตริง](https://reader033.vdocuments.us/reader033/viewer/2022060118/558bef95d8b42a4a778b45ad/html5/thumbnails/13.jpg)
String คอขอความ หรอ สายของอกขระ ในภาษา C++ ไมมตวแปร
ประเภท String แตจะมตวแปรประเภท char ใหใชแทน ซงตวแปร
ประเภทchar จะสามารถเกบอกขระได 1 อกขระ เทานนถาหากเราอยากให
ตวแปร char สามารถเกบขอความไดเรากสามารถ ท าใหตว
แปร char เปน array ได char Name[10];
![Page 14: บทที่ 5ข้อมูลชนิดอาร์เรย์และสตริง](https://reader033.vdocuments.us/reader033/viewer/2022060118/558bef95d8b42a4a778b45ad/html5/thumbnails/14.jpg)
ใชเครองหมาย == เปนการเปรยบเทยบวา String 2 ตวเปน Object เดยวกนหรอไม โดยจะ
เปรยบเทยบคาอางองหรอทอยในหนวยความจ าของตวแปรท งสอง ไมไดเปนการ
เปรยบเทยบถงขอมลท String ท ง 2 ตววาเกบขอมลเดยวกนหรอไม
รปแบบค าส ง
String1 == String2; equals() method เปนการเปรยบเทยบคาใน String Object ท ง 2 ตวเปนคาเดยวกนหรอไม
โดยทจะใหคาเปนจรง (True) กตอเมอตวอกษรทกตวใน String ท ง 2 คา
จะตองเหมอนกนหมด โดยสนใจตวอกษรพมพเลกและพมพใหญดวย หากตางกนก
จะ
ใหคาเปนเทจ (False)
![Page 15: บทที่ 5ข้อมูลชนิดอาร์เรย์และสตริง](https://reader033.vdocuments.us/reader033/viewer/2022060118/558bef95d8b42a4a778b45ad/html5/thumbnails/15.jpg)
™ คลาส StringBuffer จะมลกษณะคลายกบคลาส String เพยงแตเปน
ตวแปรสตรงทมการแกไขคาแบบถาวร คอนสตรกเตอรของคลาส StringBuffer ท
นาสนใจมดงตอไปน
v StringBuffer(String s) เกบสตรง s ไวในตวแปร StringBuffer v StringBuffer() เกบขอความวางเปลาไวในตวแปร StringBuffer และม
ขนาด 16 byte เหตทตวแปร StringBuffer มขนาดปกต 16 และจะเพมขนาด
เมอเกบขอความลงไป เปนเพราะถามการเปลยนขอความทเกบภายหลง ขอความใหมอาจม
ขนาดไมเทาเดม ดงนนจาวาจงวางไวอก 16 ทวางเพอจะไดไมตองกนทในหนวยความจ า
เพมเตมอก ในกรณทขอความใหมมขนาดใหญกวาเดมไมเกน 16 เพราะการกนทใน
หนวยความจ าเพมเตมภายหลงเปนเรองยงยากและอาจท าใหประสทธภาพในการเขาถงลดลง
v StringBuffer(int length) เกบขอความวางเปลาไวในตวแปร StringBuffer และมขนาดเทากบ length