Upload
kong-kub
View
441
Download
1
Tags:
Embed Size (px)
Citation preview
อารเรย (Array)
อารเรย (Array) เปนตวแปรชดใหส าหรบเกบขอมลทมความสมพนธกน โดยจะเกบไวในชอ
เดยวกน
สมาชกแตละตวของ Array จะเรยกวา Element หรอ Cell ตวเลขทใชระบต าแหนงสมาชกของ Array เรยกวา Index หรอ Subscript
อารเรยหนงมต มโครงสรางเทยบเทาเมตรกซขนาด nx1 การประกาศตวแปร
อารเรย จะใชเครองหมาย [ ] ลอมคาตวเลขจ านวนเตม เพอบอกจ านวนหนวยขอมลทตองการไดในรป
ชนดของตวแปร ชอตวแปร[จ านวนสมาชกทตองการ]
data_type variable_name [ number-of-elements ]
เชน int a[5];
double x, y[10], z[3];
อารเรยหลายมต (Multi-dimensional array) คอ อารเรยทมสมาชกเปนขอมลอารเรย นนคอ ในหนวยขอมลแตละหนวยของอารเรย
จะเปนอารเรยยอยๆ ซงอาจจะก าหนดซอนลงไปไดหลายช น
การก าหนดอารเรยหลายมต จะกระท าในรป
ชนดตวแปร ชอตวแปร[จ านวนสมาชก][จ านวนสมาชก]….; การประกาศอารเรยหลายตวท าไดดงน
int [] abc , xyz; abc = new int[500]; xyz = new int[10]; หรอเขยนรวมกนไดดงน
int[] abc = new int[500], xyz = new int[10];
™ สามารถประกาศตวแปร Array พรอมกบก าหนดคาเรมตนใหกบ
สมาชก Array ไดโดยมรปแบบ
ดงน
ชนดของตวแปรอารเรย ชออารเรย[จ านวนขอมล] = {คาคงท,คาคงท
,…};
เราสามารถใชค าส งวนรอบ 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]); }
สามารถแบงไดเปน 2 ลกษณะ
™ 1. การสงผานคาอลเมนตอารเรยใหกบฟงกชน เปนการเรยกใช ฟงกชนแบบ Call-by-value
™ 2. การสงอารเรยทกอลเมนตใหกบฟงกชน เปนการเรยกใช
ฟงกชนแบบ Call-by-reference
™ ใชวธการสงคาของตวแปร (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] ยงเหมอนเดม
™ ™ ใชวธการสงคา แอดเดรส (Address)*** ของตวแปรไปให
ฟงกชน
™ ใชกบฟงกชนทรบคาเขาเปนอารเรย
™ สามารถแกไขคาของอารกวเมนตภายในฟงกชนได = การแกไข
คาตวแปรอารเรย ภายในฟงกชน มผลการเปลยนแปลงตอตวแปรทสงคามา
เพราะ การมการจดการคาของหนวยความจ าในต าแหนงเดยวกน
™ ***แอดเดรส (Address) คอ คาทใชอางถงตวขอมลภายในหนวยความจ า เหมอนกบหมายเลขบานเลขท**
™ ™ อารเรยสามารถเกบ 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();
™ ™ โดยสรป ส าหรบอารเรยสองมต เมออางชออารเรย จะหมายถง
ต าแหนงเรมตนของอารเรยท งหมด (อารเรย 2 มต) ™ เมออางชออารเรยพรอมสมาชกหนงอนดบ จะหมายถงต าแหนง
เรมตนของอารเรยยอยภายใน (อารเรย 1 มต) ™ เมออางชออารเรยพรอมคาสองอนดบ จะหมายถง ขอมลภายใน
อารเรย
™ ใชลป 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) · เราจะใชกลมคาคงททมสมาชกเปนกลมคาคงทยอย ซงเปนชนดเดยว กน
และมขนาดเทากน รวมถงสอดคลองกบชนดของอารเรยดวย
· โดยใชเครองหมาย {} หรอ , ในการแบงแยกแตละแถว
ในภาษา 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
String คอขอความ หรอ สายของอกขระ ในภาษา C++ ไมมตวแปร
ประเภท String แตจะมตวแปรประเภท char ใหใชแทน ซงตวแปร
ประเภทchar จะสามารถเกบอกขระได 1 อกขระ เทานนถาหากเราอยากให
ตวแปร char สามารถเกบขอความไดเรากสามารถ ท าใหตว
แปร char เปน array ได char Name[10];
ใชเครองหมาย == เปนการเปรยบเทยบวา String 2 ตวเปน Object เดยวกนหรอไม โดยจะ
เปรยบเทยบคาอางองหรอทอยในหนวยความจ าของตวแปรท งสอง ไมไดเปนการ
เปรยบเทยบถงขอมลท String ท ง 2 ตววาเกบขอมลเดยวกนหรอไม
รปแบบค าส ง
String1 == String2; equals() method เปนการเปรยบเทยบคาใน String Object ท ง 2 ตวเปนคาเดยวกนหรอไม
โดยทจะใหคาเปนจรง (True) กตอเมอตวอกษรทกตวใน String ท ง 2 คา
จะตองเหมอนกนหมด โดยสนใจตวอกษรพมพเลกและพมพใหญดวย หากตางกนก
จะ
ใหคาเปนเทจ (False)
™ คลาส StringBuffer จะมลกษณะคลายกบคลาส String เพยงแตเปน
ตวแปรสตรงทมการแกไขคาแบบถาวร คอนสตรกเตอรของคลาส StringBuffer ท
นาสนใจมดงตอไปน
v StringBuffer(String s) เกบสตรง s ไวในตวแปร StringBuffer v StringBuffer() เกบขอความวางเปลาไวในตวแปร StringBuffer และม
ขนาด 16 byte เหตทตวแปร StringBuffer มขนาดปกต 16 และจะเพมขนาด
เมอเกบขอความลงไป เปนเพราะถามการเปลยนขอความทเกบภายหลง ขอความใหมอาจม
ขนาดไมเทาเดม ดงนนจาวาจงวางไวอก 16 ทวางเพอจะไดไมตองกนทในหนวยความจ า
เพมเตมอก ในกรณทขอความใหมมขนาดใหญกวาเดมไมเกน 16 เพราะการกนทใน
หนวยความจ าเพมเตมภายหลงเปนเรองยงยากและอาจท าใหประสทธภาพในการเขาถงลดลง
v StringBuffer(int length) เกบขอความวางเปลาไวในตวแปร StringBuffer และมขนาดเทากบ length