15
อาร์เรย์ (Array) อาร์เรย์ (Array) เป็นตัวแปรชุดให้สาหรับเก็บข้อมูลที ่มีความสัมพันธ์กัน โดยจะเก็บไว้ในชื ่อ เดียวกัน สมาชิกแต่ละตัวของ Array จะเรียกว่า Element หรือ Cell ตัว เลขที ่ใช้ระบุตาแหน่งสมาชิกของ Array เรียกว่า Index หรือ Subscript

บทที่ 5ข้อมูลชนิดอาร์เรย์และสตริง

Embed Size (px)

Citation preview

Page 1: บทที่ 5ข้อมูลชนิดอาร์เรย์และสตริง

อารเรย (Array)

อารเรย (Array) เปนตวแปรชดใหส าหรบเกบขอมลทมความสมพนธกน โดยจะเกบไวในชอ

เดยวกน

สมาชกแตละตวของ Array จะเรยกวา Element หรอ Cell ตวเลขทใชระบต าแหนงสมาชกของ Array เรยกวา Index หรอ Subscript

Page 2: บทที่ 5ข้อมูลชนิดอาร์เรย์และสตริง

อารเรยหนงมต มโครงสรางเทยบเทาเมตรกซขนาด nx1 การประกาศตวแปร

อารเรย จะใชเครองหมาย [ ] ลอมคาตวเลขจ านวนเตม เพอบอกจ านวนหนวยขอมลทตองการไดในรป

ชนดของตวแปร ชอตวแปร[จ านวนสมาชกทตองการ]

data_type variable_name [ number-of-elements ]

เชน int a[5];

double x, y[10], z[3];

Page 3: บทที่ 5ข้อมูลชนิดอาร์เรย์และสตริง

อารเรยหลายมต (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ข้อมูลชนิดอาร์เรย์และสตริง

™ สามารถประกาศตวแปร Array พรอมกบก าหนดคาเรมตนใหกบ

สมาชก Array ไดโดยมรปแบบ

ดงน

ชนดของตวแปรอารเรย ชออารเรย[จ านวนขอมล] = {คาคงท,คาคงท

,…};

Page 5: บทที่ 5ข้อมูลชนิดอาร์เรย์และสตริง

เราสามารถใชค าส งวนรอบ 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ข้อมูลชนิดอาร์เรย์และสตริง

สามารถแบงไดเปน 2 ลกษณะ

™ 1. การสงผานคาอลเมนตอารเรยใหกบฟงกชน เปนการเรยกใช ฟงกชนแบบ Call-by-value

™ 2. การสงอารเรยทกอลเมนตใหกบฟงกชน เปนการเรยกใช

ฟงกชนแบบ Call-by-reference

Page 7: บทที่ 5ข้อมูลชนิดอาร์เรย์และสตริง

™ ใชวธการสงคาของตวแปร (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ข้อมูลชนิดอาร์เรย์และสตริง

™ ™ ใชวธการสงคา แอดเดรส (Address)*** ของตวแปรไปให

ฟงกชน

™ ใชกบฟงกชนทรบคาเขาเปนอารเรย

™ สามารถแกไขคาของอารกวเมนตภายในฟงกชนได = การแกไข

คาตวแปรอารเรย ภายในฟงกชน มผลการเปลยนแปลงตอตวแปรทสงคามา

เพราะ การมการจดการคาของหนวยความจ าในต าแหนงเดยวกน

™ ***แอดเดรส (Address) คอ คาทใชอางถงตวขอมลภายในหนวยความจ า เหมอนกบหมายเลขบานเลขท**

Page 9: บทที่ 5ข้อมูลชนิดอาร์เรย์และสตริง

™ ™ อารเรยสามารถเกบ 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ข้อมูลชนิดอาร์เรย์และสตริง

™ ™ โดยสรป ส าหรบอารเรยสองมต เมออางชออารเรย จะหมายถง

ต าแหนงเรมตนของอารเรยท งหมด (อารเรย 2 มต) ™ เมออางชออารเรยพรอมสมาชกหนงอนดบ จะหมายถงต าแหนง

เรมตนของอารเรยยอยภายใน (อารเรย 1 มต) ™ เมออางชออารเรยพรอมคาสองอนดบ จะหมายถง ขอมลภายใน

อารเรย

Page 11: บทที่ 5ข้อมูลชนิดอาร์เรย์และสตริง

™ ใชลป 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ข้อมูลชนิดอาร์เรย์และสตริง

ในภาษา 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ข้อมูลชนิดอาร์เรย์และสตริง

String คอขอความ หรอ สายของอกขระ ในภาษา C++ ไมมตวแปร

ประเภท String แตจะมตวแปรประเภท char ใหใชแทน ซงตวแปร

ประเภทchar จะสามารถเกบอกขระได 1 อกขระ เทานนถาหากเราอยากให

ตวแปร char สามารถเกบขอความไดเรากสามารถ ท าใหตว

แปร char เปน array ได char Name[10];

Page 14: บทที่ 5ข้อมูลชนิดอาร์เรย์และสตริง

ใชเครองหมาย == เปนการเปรยบเทยบวา String 2 ตวเปน Object เดยวกนหรอไม โดยจะ

เปรยบเทยบคาอางองหรอทอยในหนวยความจ าของตวแปรท งสอง ไมไดเปนการ

เปรยบเทยบถงขอมลท String ท ง 2 ตววาเกบขอมลเดยวกนหรอไม

รปแบบค าส ง

String1 == String2; equals() method เปนการเปรยบเทยบคาใน String Object ท ง 2 ตวเปนคาเดยวกนหรอไม

โดยทจะใหคาเปนจรง (True) กตอเมอตวอกษรทกตวใน String ท ง 2 คา

จะตองเหมอนกนหมด โดยสนใจตวอกษรพมพเลกและพมพใหญดวย หากตางกนก

จะ

ใหคาเปนเทจ (False)

Page 15: บทที่ 5ข้อมูลชนิดอาร์เรย์และสตริง

™ คลาส StringBuffer จะมลกษณะคลายกบคลาส String เพยงแตเปน

ตวแปรสตรงทมการแกไขคาแบบถาวร คอนสตรกเตอรของคลาส StringBuffer ท

นาสนใจมดงตอไปน

v StringBuffer(String s) เกบสตรง s ไวในตวแปร StringBuffer v StringBuffer() เกบขอความวางเปลาไวในตวแปร StringBuffer และม

ขนาด 16 byte เหตทตวแปร StringBuffer มขนาดปกต 16 และจะเพมขนาด

เมอเกบขอความลงไป เปนเพราะถามการเปลยนขอความทเกบภายหลง ขอความใหมอาจม

ขนาดไมเทาเดม ดงนนจาวาจงวางไวอก 16 ทวางเพอจะไดไมตองกนทในหนวยความจ า

เพมเตมอก ในกรณทขอความใหมมขนาดใหญกวาเดมไมเกน 16 เพราะการกนทใน

หนวยความจ าเพมเตมภายหลงเปนเรองยงยากและอาจท าใหประสทธภาพในการเขาถงลดลง

v StringBuffer(int length) เกบขอความวางเปลาไวในตวแปร StringBuffer และมขนาดเทากบ length