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

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

Upload: kong-kub

Post on 25-Jun-2015

441 views

Category:

Education


1 download

TRANSCRIPT

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