บทที่ 5 ข้อมูลชนิดอาร์เรย์และสตริง...
TRANSCRIPT
![Page 1: บทที่ 5 ข้อมูลชนิดอาร์เรย์และสตริง 6.1](https://reader031.vdocuments.site/reader031/viewer/2022013105/5578fb64d8b42a675b8b4af5/html5/thumbnails/1.jpg)
ชนมธยมศกษาปท 6/1
![Page 2: บทที่ 5 ข้อมูลชนิดอาร์เรย์และสตริง 6.1](https://reader031.vdocuments.site/reader031/viewer/2022013105/5578fb64d8b42a675b8b4af5/html5/thumbnails/2.jpg)
อารเรย (Array)
อารเรย (Array) เปนตวแปรชดใหสาหรบเกบขอมลทมความสมพนธกน โดยจะเกบไวในชอเดยวกน
สมาชกแตละตวของ Array จะเรยกวา Element หรอ Cell ตวเลขทใชระบตาแหนงสมาชกของ Array เรยกวา Index หรอ Subscript
X[0] X[1] X[2] X[3] X[4]
ตวอยาง Array X ทม 5 Element ซงจะเรมตนตงแต Index 0 ถง 4
5 9 7 38
![Page 3: บทที่ 5 ข้อมูลชนิดอาร์เรย์และสตริง 6.1](https://reader031.vdocuments.site/reader031/viewer/2022013105/5578fb64d8b42a675b8b4af5/html5/thumbnails/3.jpg)
อารเรยหนงมต มโครงสรางเทยบเทาเมตรกซขนาด nx1 การประกาศตวแปรอารเรย จะใชเครองหมาย [ ] ลอมคาตวเลขจานวนเตม เพอบอกจานวนหนวยขอมลทตองการไดในรป
ชนดของตวแปร ชอตวแปร[จานวนสมาชกทตองการ]data_type variable_name [ number-of-elements ]
เชน int a[5];double x, y[10], z[3];
ตวแปรอารเรยแบบ 1 มต
![Page 4: บทที่ 5 ข้อมูลชนิดอาร์เรย์และสตริง 6.1](https://reader031.vdocuments.site/reader031/viewer/2022013105/5578fb64d8b42a675b8b4af5/html5/thumbnails/4.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 5: บทที่ 5 ข้อมูลชนิดอาร์เรย์และสตริง 6.1](https://reader031.vdocuments.site/reader031/viewer/2022013105/5578fb64d8b42a675b8b4af5/html5/thumbnails/5.jpg)
ตวอยางอารเรยหลายมตเชน อารเรยทมสมาชกอย 3 ตว และสมาชกแตละตวกเปนอารเรยเกบขอมลชนด int มจานวน
สมาชก 2 ตว จะกาหนดไดดงน int a[3][2];
ขนาดของอารเรย 3 x 2
จานวนไบต ทใชในการเกบอารเรย
sizeof (a) คานวณจาก 3 x 2 x sizeof ( int ) = 3x2x4 = 24 ไบต
จากการกาหนดดงกลาวจะไดอารเรย
ทมโครงสรางดงรป
a[0][0] a[0][1]
a[1][1]a[1][0]
a[2][1]a[2][0]
a
a[0
]
a[1
]
a[2
]
a[0][0] a[0][1] a[1][0] a[1][1] a[2][0] a[2][1]
a
a[0]
a[1] a[2]
การจดวางภายในหนวยความจา
สามารถแสดงไดดงรป
![Page 6: บทที่ 5 ข้อมูลชนิดอาร์เรย์และสตริง 6.1](https://reader031.vdocuments.site/reader031/viewer/2022013105/5578fb64d8b42a675b8b4af5/html5/thumbnails/6.jpg)
สามารถประกาศตวแปร Array พรอมกบกาหนดคาเรมตนใหกบสมาชก Array
ไดโดยมรปแบบดงน
ชนดของตวแปรอารเรย ชออารเรย[จานวนขอมล] = {คาคงท,คาคงท,…};
เชน
การกาหนดคาเรมตนใหอารเรย 1 มต
Type [] var_name = {value1,value2,value3};
int []num = {5,6,9};String []name = {“noom”,”boby”,”goft”};Int []unit = {1}
![Page 7: บทที่ 5 ข้อมูลชนิดอาร์เรย์และสตริง 6.1](https://reader031.vdocuments.site/reader031/viewer/2022013105/5578fb64d8b42a675b8b4af5/html5/thumbnails/7.jpg)
ตวอยางโปรแกรม
import java.util.Scanner; public class ArrayDemo1 {public static void main(String[] args){final int EMPLOYEES = 3; //กาหนดคาคงทวามพนกงาน 3 คน
int[] hours = new int[EMPLOYEES]; //ประกาศตวแปรอารเรยเกบชวโมงทางาน 3 เซล Scanner keyboard = new Scanner(System.in); //สรางออบเจกตรบขอมลทางแปนพมพ System.out.println("Enter the hours worked by " +
EMPLOYEES + " employees.");for (int index = 0; index < EMPLOYEES; index++)//วนลปรบขอมลไปเกบในเซล
{ System.out.print("Employee " + (index + 1) + ": ");
hours[index] = keyboard.nextInt();//รบขอมลทางแปนพมพไปเกบในอารเรย } System.out.println("The hours you entered are:");//แสดงชวโมงการทางาน for (int index = 0; index < EMPLOYEES; index++)//วนลปแสดงขอมลแตละเซลของอารเรย System.out.println(hours[index]);
}}
![Page 8: บทที่ 5 ข้อมูลชนิดอาร์เรย์และสตริง 6.1](https://reader031.vdocuments.site/reader031/viewer/2022013105/5578fb64d8b42a675b8b4af5/html5/thumbnails/8.jpg)
เมอมการประกาศอารเรยแลว คาตาแหนงหมายเลขลาดบขอมลสาหรบใชเขาถงตวแปร
ยอยตางๆ ในอารเรย จะถกกาหนดโดยอตโนมต
โดยหากกาหนดอารเรยดวยขนาด n ขอมล หนวยแรก จะมคาตาแหนงลาดบเปน 0 ไป
จนถงขอมลหนวยสดทายจะมคาตาแหนงลาดบเปน n-1เชน int v[5];
การเขาถงตวแปรอารเรย
v[0] v[1] v[2] v[3] v[4]
3000 3004 3008 3012 3016
![Page 9: บทที่ 5 ข้อมูลชนิดอาร์เรย์และสตริง 6.1](https://reader031.vdocuments.site/reader031/viewer/2022013105/5578fb64d8b42a675b8b4af5/html5/thumbnails/9.jpg)
ถาตองการอานหรอเขยนขอมลในหนวยตางๆ ของตวแปรอารเรย จะตองอางชอตวแปร
ตามดวยคาลาดบของหนวยในกลมขอมลอารเรย ลอมดวยเครองหมาย [ ] ซงเรยกวา
subscript (หรอดชน index) คาดชน อาจอยในรป คาคงท ของตวแปร นพจน หรอฟงกชนทใหคาเปนคาจานวนเตมก
ได ( positive integer >=0 ) ของเขตของ index หรอ subscript มคาตงแต 0 ถง n-1 ( n คอขนาดของ
อารเรย)
![Page 10: บทที่ 5 ข้อมูลชนิดอาร์เรย์และสตริง 6.1](https://reader031.vdocuments.site/reader031/viewer/2022013105/5578fb64d8b42a675b8b4af5/html5/thumbnails/10.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]); }
การใชคาสงวนรอบ for ในการเขาถงคาในอารเรย
![Page 11: บทที่ 5 ข้อมูลชนิดอาร์เรย์และสตริง 6.1](https://reader031.vdocuments.site/reader031/viewer/2022013105/5578fb64d8b42a675b8b4af5/html5/thumbnails/11.jpg)
int grades[5];int grades[5];grades[0] = 98;grades[1] = grades[0] – 11;grades[2] = 2 * (grades[0] – 6);grades[3] = 79;grades[4] = (grades[2]+grades[3]– 3)/2;total = grades[0]+ grades[1]+ grades[2]+
grades[3]+ grades[4];
grades[i];grades[2*i];grades[j-i];
ตวอยางโปรแกรม
ถาตองการหาผลรวมของตวแปร grade ทง 5 อลเมนต ทาดงนtotal = grades[0] + grades[1] + grades[2] + grades[3] + grades[4];
เปลยนเปน for loop ไดดงนtotal = 0;for ( i = 0 ; i <= 4 ; i++)
total += grades[i];
![Page 12: บทที่ 5 ข้อมูลชนิดอาร์เรย์และสตริง 6.1](https://reader031.vdocuments.site/reader031/viewer/2022013105/5578fb64d8b42a675b8b4af5/html5/thumbnails/12.jpg)
การสงผานอารเรยไปยงฟงกชน
สามารถแบงไดเปน 2 ลกษณะ
การสงผานคาอลเมนตอารเรยใหกบฟงกชน เปนการเรยกใชฟงกชนแบบ
Call-by-valueการสงอารเรยทกอลเมนตใหกบฟงกชน เปนการเรยกใชฟงกชนแบบ Call-
by-reference
![Page 13: บทที่ 5 ข้อมูลชนิดอาร์เรย์และสตริง 6.1](https://reader031.vdocuments.site/reader031/viewer/2022013105/5578fb64d8b42a675b8b4af5/html5/thumbnails/13.jpg)
การเรยกใชแบบ Call-by-value
ใชวธการสงคาของตวแปร (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 14: บทที่ 5 ข้อมูลชนิดอาร์เรย์และสตริง 6.1](https://reader031.vdocuments.site/reader031/viewer/2022013105/5578fb64d8b42a675b8b4af5/html5/thumbnails/14.jpg)
ใชวธการสงคา แอดเดรส (Address)*** ของตวแปรไปใหฟงกชน
ใชกบฟงกชนทรบคาเขาเปนอารเรย
สามารถแกไขคาของอารกวเมนตภายในฟงกชนได = การแกไขคาตวแปรอารเรย ภายใน
ฟงกชน มผลการเปลยนแปลงตอตวแปรทสงคามา
เพราะ การมการจดการคาของหนวยความจาในตาแหนงเดยวกน
***แอดเดรส (Address) คอ คาทใชอางถงตวขอมลภายในหนวยความจา เหมอนกบ
หมายเลขบานเลขท***
การเรยกใชแบบ Call-by-reference
![Page 15: บทที่ 5 ข้อมูลชนิดอาร์เรย์และสตริง 6.1](https://reader031.vdocuments.site/reader031/viewer/2022013105/5578fb64d8b42a675b8b4af5/html5/thumbnails/15.jpg)
ฟงกชนทมการรบคาเขาเปนอารเรย
ฟงกชนสามารถทจะรบคาเขาเปนอารเรยได ซงรปแบบของการเขยนตนแบบของฟงกชน
เปนดงน
ชนดขอมล ชอฟงกชน(ชนดขอมล ชอตวแปร[ขนาดอารเรย]); ในกรณฟงกชนมการรบคาเขาเปนอารเรย 1 มต อาจจะไมตองกาหนดขนาดของอารเรยก
ได
ตวอยางเชน
int sum_arr(int num[10]);
void print_arr(int a[5]);float average(int num[]);
![Page 16: บทที่ 5 ข้อมูลชนิดอาร์เรย์และสตริง 6.1](https://reader031.vdocuments.site/reader031/viewer/2022013105/5578fb64d8b42a675b8b4af5/html5/thumbnails/16.jpg)
การสงผานคาอลเมนตอารเรยใหกบ
ฟงกชน
หากฟงกชน my_func มตนแบบของฟงกชนดงน
void my_func(int x); และใน main ไดมการประกาศตวแปรอารเรยชอวา num
int num[10]; การสงอลเมนตท 0 ของอารเรย num ไปเปนอารกวเมนตของฟงกชน my_func
สามารถเขยนไดดงน
my_func(num[0]);
![Page 17: บทที่ 5 ข้อมูลชนิดอาร์เรย์และสตริง 6.1](https://reader031.vdocuments.site/reader031/viewer/2022013105/5578fb64d8b42a675b8b4af5/html5/thumbnails/17.jpg)
ตวอยางท 1 : การสงคาแตละอลเมนตใน
อารเรยใหกบฟงกชน#include <stdio.h>void check_val(int x);int main()
{int a[3] = {2,-1,5};check_val(a[0]);return 0;
}void check_val(int x)
{if(x >= 0)
printf("%d : Positive\n",x);elseprintf("%d : Negative\n",x) ;
}
2 : Positive
![Page 18: บทที่ 5 ข้อมูลชนิดอาร์เรย์และสตริง 6.1](https://reader031.vdocuments.site/reader031/viewer/2022013105/5578fb64d8b42a675b8b4af5/html5/thumbnails/18.jpg)
ตวอยางท 2: การสงคาแตละอลเมนตใน
อารเรยใหกบฟงกชน#include <stdio.h>void check_val(int x);int main()
{int i,a[3] = {2,-1,5};for(i=0;i<3;i++)
check_val(a[i]);return 0;
}void check_val(int x)
{if(x >= 0)
printf("%d : Positive\n",x);elseprintf("%d : Negative\n",x);
}
2 : Positive-1 : Negative5 : Positive
![Page 19: บทที่ 5 ข้อมูลชนิดอาร์เรย์และสตริง 6.1](https://reader031.vdocuments.site/reader031/viewer/2022013105/5578fb64d8b42a675b8b4af5/html5/thumbnails/19.jpg)
ตวอยางท 3 : การสงคาแตละอลเมนตใน
อารเรยใหกบฟงกชน#include <stdio.h>void showVal(int val); /* function prototype */
void main()
{int nums[5] = {2, 18, 1, 27, 16};showVal(nums[0]);
}
void showVal(int val) /* show a value */
{printf("Value is %d\n", val);
}
Value is 2
![Page 20: บทที่ 5 ข้อมูลชนิดอาร์เรย์และสตริง 6.1](https://reader031.vdocuments.site/reader031/viewer/2022013105/5578fb64d8b42a675b8b4af5/html5/thumbnails/20.jpg)
การสงอารเรยทกอลเมนตของอารเรย
ใหกบฟงกชน
การสงอารเรยในกรณน ใชแคชอตวแปรอารเรยเทานน เชน หากใน main มการประกาศอารเรยดงน
int num[10];
และฟงกชน print_arr มตนแบบฟงกชนดงน
void print_arr(int a[10]); การสงอารเรย num ทกอลเมนตไปใหฟงกชน print_arr สามารถเขยนไดดงน
print_arr(num);
![Page 21: บทที่ 5 ข้อมูลชนิดอาร์เรย์และสตริง 6.1](https://reader031.vdocuments.site/reader031/viewer/2022013105/5578fb64d8b42a675b8b4af5/html5/thumbnails/21.jpg)
ตวอยางท 1: การสงอารเรยทกอลเมนต
ใหกบฟงกชน#include <stdio.h>void print_arr(int a[4]);int main() {
int num[4] = {5,2,-1,8};print_arr(num);return 0;
}
void print_arr(int a[4])
{int i;for(i =0;i<4;i++)
printf("%d ", a[i]);}
5 2 -1 8
![Page 22: บทที่ 5 ข้อมูลชนิดอาร์เรย์และสตริง 6.1](https://reader031.vdocuments.site/reader031/viewer/2022013105/5578fb64d8b42a675b8b4af5/html5/thumbnails/22.jpg)
ตวอยางท 2 : การสงอารเรยทกอลเมนต
ใหกบฟงกชน ไฟล arrayex9.c#include <stdio.h>void find_max(int vals[5]); /* function prototype */
void main()
{int nums[5] = {2, 18, 1, 27, 16};find_max(nums);
}
void find_max(int vals[5]) /* find the maximum value */
{int i, max = vals[0];for ( i = 1; i < 5; ++i)
if (max < vals[i])
max = vals[i];printf("The maximum value is %d\n", max);
}
The maximum value is 27
![Page 23: บทที่ 5 ข้อมูลชนิดอาร์เรย์และสตริง 6.1](https://reader031.vdocuments.site/reader031/viewer/2022013105/5578fb64d8b42a675b8b4af5/html5/thumbnails/23.jpg)
อารเรยสามารถเกบ reference ของ Object ได โดยกาหนดใหอาเรย
เปน Class นน ๆ ในตอนประกาศอาเรย มรปแบบดงน
className [] arrayName = new className[size];
เชน
Student [] studentList = new Student[10];
อารเรยของออบเจกต
![Page 24: บทที่ 5 ข้อมูลชนิดอาร์เรย์และสตริง 6.1](https://reader031.vdocuments.site/reader031/viewer/2022013105/5578fb64d8b42a675b8b4af5/html5/thumbnails/24.jpg)
Student [] studentList = new Student[3];studentList[0] = new Student();studentList[1] = new Student();studentList[2] = new Student();
studentList
studentList[0]
studentList[1]
studentList[2]
Student Student Object
Student Student Object
Student Student Object
![Page 25: บทที่ 5 ข้อมูลชนิดอาร์เรย์และสตริง 6.1](https://reader031.vdocuments.site/reader031/viewer/2022013105/5578fb64d8b42a675b8b4af5/html5/thumbnails/25.jpg)
อารเรยแบบ 2 มต
โดยสรป สาหรบอารเรยสองมต เมออางชออารเรย จะหมายถงตาแหนงเรมตนของอารเรย
ทงหมด (อารเรย 2 มต)
เมออางชออารเรยพรอมสมาชกหนงอนดบ จะหมายถงตาแหนงเรมตนของอารเรยยอยภายใน
(อารเรย 1 มต)
เมออางชออารเรยพรอมคาสองอนดบ จะหมายถง ขอมลภายในอารเรย
X[1][0] X[1][1] X[1][2] X[1][3] X[1][4]
X[0][0] X[0][1] X[0][2] X[0][3] X[0][4]
อาเรย 2 มต
![Page 26: บทที่ 5 ข้อมูลชนิดอาร์เรย์และสตริง 6.1](https://reader031.vdocuments.site/reader031/viewer/2022013105/5578fb64d8b42a675b8b4af5/html5/thumbnails/26.jpg)
การประกาศตวแปรอารเรย 2 มต
int val[3][4];double prices[10][5]; char code[6][4]; code[0][1] code[0][2]
code[0][0] code[0][3]
code[1][0] code[1][1]
code[5][0]
.
.
.
.
.
code[5][3]
code[3]
![Page 27: บทที่ 5 ข้อมูลชนิดอาร์เรย์และสตริง 6.1](https://reader031.vdocuments.site/reader031/viewer/2022013105/5578fb64d8b42a675b8b4af5/html5/thumbnails/27.jpg)
ตวอยางการเขาถงตวแปรอารเรย 2 มต
num = val[2][3];val[0][0] = 62;new_nu = 4 * ( val[1][0] – 5);sum_row0 = val[0][0] + val[0][1] + val[0][2] + val[0][3];
![Page 28: บทที่ 5 ข้อมูลชนิดอาร์เรย์และสตริง 6.1](https://reader031.vdocuments.site/reader031/viewer/2022013105/5578fb64d8b42a675b8b4af5/html5/thumbnails/28.jpg)
การใชคาสง for ในการเขาถงอารเรย 2
มต
ใชลป 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;
0 1 2
1 2 3
0 1 2
0
1
![Page 29: บทที่ 5 ข้อมูลชนิดอาร์เรย์และสตริง 6.1](https://reader031.vdocuments.site/reader031/viewer/2022013105/5578fb64d8b42a675b8b4af5/html5/thumbnails/29.jpg)
ตวอยางท 1 : การแสดงคาของอารเรย 2 มต
#include<stdio.h>int main(void)
{int i, j, val[3][4] = {8,16,9,52,3,15,27,6,14,25,2,10};
printf("\n Display all elements of array");
printf("\n%2d %2d %2d %2d", val[0][0],val[0][1],val[0][2],val[0][3]);printf("\n%2d %2d %2d %2d", val[1][0],val[1][1],val[1][2],val[1][3]);printf("\n%2d %2d %2d %2d\n",val[2][0],val[2][1],val[2][2],val[2][3]);
for ( i = 0; i < 3; ++i) {printf("\n"); /* start a new line for each row */
for ( j = 0; j < 4; ++j)
printf("%2d ", val[i][j]);}
return 0;}
Display all elements of array8 16 9 523 15 27 6
14 25 2 108 16 9 523 15 27 6
14 25 2 10
![Page 30: บทที่ 5 ข้อมูลชนิดอาร์เรย์และสตริง 6.1](https://reader031.vdocuments.site/reader031/viewer/2022013105/5578fb64d8b42a675b8b4af5/html5/thumbnails/30.jpg)
ตวอยางท 2 : การรบและแสดงคาของ
อารเรย 2 มต#include <stdio.h>int main() {int i,j,a[2][3];for(i=0;i<2;i++) {for(j=0;j<3;j++) {
printf("Enter a[%d][%d] : ",i,j);scanf("%d", &a[i][j]);}
}for(i=0;i<2;i++) {for(j=0;j<3;j++)
printf("%d",a[i][j]);printf("\n");
}return 0;
}
Enter a[0][0]: 10Enter a[0][1]: 20Enter a[0][2]: 30Enter a[1][0]: 40Enter a[1][1]: 50Enter a[1][2]: 6010 20 3040 50 60
![Page 31: บทที่ 5 ข้อมูลชนิดอาร์เรย์และสตริง 6.1](https://reader031.vdocuments.site/reader031/viewer/2022013105/5578fb64d8b42a675b8b4af5/html5/thumbnails/31.jpg)
การใหคาเรมตน (Array Initialization)
เราจะใชกลมคาคงททมสมาชกเปนกลมคาคงทยอย ซงเปนชนดเดยว กนและมขนาดเทากน
รวมถงสอดคลองกบชนดของอารเรยดวย
โดยใชเครองหมาย {} หรอ , ในการแบงแยกแตละแถว
![Page 32: บทที่ 5 ข้อมูลชนิดอาร์เรย์และสตริง 6.1](https://reader031.vdocuments.site/reader031/viewer/2022013105/5578fb64d8b42a675b8b4af5/html5/thumbnails/32.jpg)
ตวอยางการใหคาเรมตน (Array Initialization)int val[3][4] ={ { 8,16, 9, 52 },
{3,15, 27, 6},
{14, 25, 2, 10} };
int val[3][4] = { 8, 16, 9, 52,
3, 15, 27, 6,
14, 25, 2, 10 };
![Page 33: บทที่ 5 ข้อมูลชนิดอาร์เรย์และสตริง 6.1](https://reader031.vdocuments.site/reader031/viewer/2022013105/5578fb64d8b42a675b8b4af5/html5/thumbnails/33.jpg)
หากไมมการกาหนดจานวนแถว คอมไพเลอรจะกาหนดจานวนแถวโดยนบจากทกาหนด
ในคาเรมตน แตจะตองมการกาหนดจานวนหลกเสมอ เชน
int a[][2] = {{5,8},{9},{-1}};
5 8
9 0
0 1
0
1
-1 02
![Page 34: บทที่ 5 ข้อมูลชนิดอาร์เรย์และสตริง 6.1](https://reader031.vdocuments.site/reader031/viewer/2022013105/5578fb64d8b42a675b8b4af5/html5/thumbnails/34.jpg)
ในการกาหนดคาเรมตนของอารเรย 2 มต สามารถละเครองหมายปกกาทใชแบงแถวได
โดยใชจานวนหลกในการจดวาอลเมนตใดอยแถวใด
เชน float x[2][3] = { 2.5, 1.25, 8.6,4.1, 6.9, 7.2 };
2.5 1.25
4.1
8.6
0 1
0
1 7.26.9
2
![Page 35: บทที่ 5 ข้อมูลชนิดอาร์เรย์และสตริง 6.1](https://reader031.vdocuments.site/reader031/viewer/2022013105/5578fb64d8b42a675b8b4af5/html5/thumbnails/35.jpg)
ในภาษา Java มกลมคลาสทเรยกวา คอลเลกชน (Collection) ซงออบเจกต
จากคลาสนสามารถใชสะสมออบเจกตตาง ๆ ไวได เชน Class ArrayList ดกวา
Array ทสามารถเพมสมาชกได โดยไมตองประกาศไวลวงหนา
การใช Class ArrayList จะตอง import java.util.ArrayListตวอยางการสรางออบเจกต จาก Class ArrayList
Class ArrayList
ArrayList nameList = new ArrayList();
![Page 36: บทที่ 5 ข้อมูลชนิดอาร์เรย์และสตริง 6.1](https://reader031.vdocuments.site/reader031/viewer/2022013105/5578fb64d8b42a675b8b4af5/html5/thumbnails/36.jpg)
Method ทสาคญของ ArrayList
add(int index,Object obj)ใชใสออบเจกตลงในอารเรยทตาแหนง index
remove(int index)นาออบเจกตตาแหนง index ออกจากอารเรย
get(int index)คนคาออบเจกตในตาแหนง index
indexof(Object obj)คนคา index ของออบเจกตทระบ
sizeสาหรบหาขนาดของ ArrayList
![Page 37: บทที่ 5 ข้อมูลชนิดอาร์เรย์และสตริง 6.1](https://reader031.vdocuments.site/reader031/viewer/2022013105/5578fb64d8b42a675b8b4af5/html5/thumbnails/37.jpg)
import java.util.ArrayList; //เรยกใชคลาส ArrayList
public class Beatles {
public static void main(String[] args)
{ArrayList band = new ArrayList(); //สรางออบเจกตเปนอารเรยชอ band
band.add("Pom"); //ใสคาวา Pom ลงใน band
band.add("Pet"); //ใสคาวา Pet ลงใน band
band.add("Jo"); //ใสคาวา Jo ลงใน band
band.add("Goft"); //ใสคาวา Goft ลงใน band
System.out.println(band); //แสดงขอมลใน band ออกมาทงหมด
int location = band.indexOf("Pet"); //หาตาแหนงของ Pet
band.remove(location); //ลบคาวา Pete ออกไป
System.out.println(band); //แสดงขอมลใน band ทงหมด
System.out.println("At index 1: "+band.get(1)); //อาน
ขอมลตาแหนงทสอง
band.add(2,"Rose"); //เพม Rose ลงไปในตาแหนงทสาม
System.out.println(band); //แสดงคาใน band ทงหมด
System.out.println("Size of the band: "+band.size());//แสดงขนาดของอารเรย
}
}
ตวอยางโปรแกรม
![Page 38: บทที่ 5 ข้อมูลชนิดอาร์เรย์และสตริง 6.1](https://reader031.vdocuments.site/reader031/viewer/2022013105/5578fb64d8b42a675b8b4af5/html5/thumbnails/38.jpg)
String คอขอความ หรอ สายของอกขระ ในภาษา C++ ไมมตว
แปร ประเภท String แตจะมตวแปรประเภท char ใหใชแทน ซงตวแปร ประเภทchar จะสามารถเกบอกขระได 1 อกขระ เทานนถาหากเราอยากใหตวแปร char สามารถเกบขอความไดเรากสามารถ ทาใหตวแปร char เปน array ได char Name[10];
String
![Page 39: บทที่ 5 ข้อมูลชนิดอาร์เรย์และสตริง 6.1](https://reader031.vdocuments.site/reader031/viewer/2022013105/5578fb64d8b42a675b8b4af5/html5/thumbnails/39.jpg)
ความหมายวา ตวแปร ชอ Name เปนตวแปรประเภท char สามารถเกบอกขระได 9 ตวอกษรสาเหตทเกบ
ได 9 ตวอกษรกเพราะวา ในกรณทเราใชตวแปร char เปน array เพอเกบขอความ Compiler จะเหลอเนอทตาแหนงสดทายไวเกบอกขระ นล เพอใหรวาเปนการจบ String เพราะฉะนนรปแบบการประกาศตวแปร char ทเปน Stringจงเปนแบบน
char ชอตวแปร[จานวนอกษร+1];ถาเราตองการประกาศตวแปร char ทเปน String ไวเกบขอมลชอทมไดมากสด 30 ตวอกษรกใหประกาศดงน char Name[31];หรอถาเรา จะประกาศตวแปร char ทเปน String ไวเกบขอมลชอเดอนมไดมากสด 20 ตวอกษรกใหประกาศดงน char Month[21];
ตวอยางเชน char Name[10];
![Page 40: บทที่ 5 ข้อมูลชนิดอาร์เรย์และสตริง 6.1](https://reader031.vdocuments.site/reader031/viewer/2022013105/5578fb64d8b42a675b8b4af5/html5/thumbnails/40.jpg)
ใชเครองหมาย = =เปนการเปรยบเทยบวา String 2 ตวเปน Object เดยวกนหรอไม โดยจะเปรยบเทยบคาอางองหรอทอยในหนวยความจาของตวแปรทงสอง ไมไดเปนการเปรยบเทยบถงขอมลท String ทง 2 ตววาเกบขอมลเดยวกนหรอไม
รปแบบคาสงString1 == String2;
การเปรยบเทยบ String
ตวอยางการใชงานString datastring1 = “Motorcycle”;String datastring2 = datastring1; .............................................
.............................................if(datastring1 == datastring2)System.out.println(“เปน Object เดยวกน”);
elseSystem.out.println(“ไมไดเปน Object เดยวกน”);
![Page 41: บทที่ 5 ข้อมูลชนิดอาร์เรย์และสตริง 6.1](https://reader031.vdocuments.site/reader031/viewer/2022013105/5578fb64d8b42a675b8b4af5/html5/thumbnails/41.jpg)
equals() methodเปนการเปรยบเทยบคาใน String Object ทง 2 ตวเปนคาเดยวกนหรอไม โดยทจะใหคาเปนจรง (True) กตอเมอตวอกษรทกตวใน String ทง 2 คาจะตองเหมอนกนหมด โดยสนใจตวอกษรพมพเลกและพมพใหญดวย หากตางกนกจะใหคาเปนเทจ (False)
รปแบบคาสงString1.equals(String2);
หากไมสนวาตวอกษรทอยภายใน String จะเปนตวเลกหรอตวใหญ ถาตองการ
ตรวจสอบเพยงการเหมอนทางรปรางกใช method equalsIgnoreCase()
ตวอยางการใชงานString datastring1 = “Motorcycle”;String datastring2 = “Motorcycle”;.......................................................................................................if (datastring1.equals(datastring2))
System.out.println(“มคาเทากน”);else
System.out.println(“มคาไมเทากน”);
![Page 42: บทที่ 5 ข้อมูลชนิดอาร์เรย์และสตริง 6.1](https://reader031.vdocuments.site/reader031/viewer/2022013105/5578fb64d8b42a675b8b4af5/html5/thumbnails/42.jpg)
compareTo method
การเปรยบเทยบความไมเทากนของ String โดยจะใหคาทไดจากการเปรยบเทยบแบงเปน 3 คาคอ- เปนลบ (-) ถาคาแรกนอยกวาคาทสอง- เปนบวก (+) ถาคาแรกมากกวาคาทสอง- เปนศนย (0) ถาคาเทากน
รปแบบคาสงString1.compareTo(String2);
ตวอยางการใชงานถากาหนดใหdatastring1 เปน “abc”;datastring2 เปน “abf”;
เขยนคาสงดงนdatastring1.compareTo(datastring2);
ผลลพธทไดจะออกมาเปน -3 หมายถง ตาแหนงท 2 ของ object แรกมคานอย กวาตาแหนงท 2 ของ object ท 2 (c<f)
![Page 43: บทที่ 5 ข้อมูลชนิดอาร์เรย์และสตริง 6.1](https://reader031.vdocuments.site/reader031/viewer/2022013105/5578fb64d8b42a675b8b4af5/html5/thumbnails/43.jpg)
คลาส StringBuffer จะมลกษณะคลายกบคลาส String เพยงแตเปนตวแปร
สตรงทมการแกไขคาแบบถาวร คอนสตรกเตอรของคลาส StringBuffer ทนาสนใจ
มดงตอไปน
StringBuffer(String s) เกบสตรง s ไวในตวแปร StringBuffer StringBuffer() เกบขอความวางเปลาไวในตวแปร StringBuffer และมขนาด
16 byte เหตทตวแปร StringBuffer มขนาดปกต 16 และจะเพมขนาดเมอเกบ
ขอความลงไป เปนเพราะถามการเปลยนขอความทเกบภายหลง ขอความใหมอาจมขนาดไม
เทาเดม ดงนนจาวาจงวางไวอก 16 ทวางเพอจะไดไมตองกนทในหนวยความจาเพมเตมอก
ในกรณทขอความใหมมขนาดใหญกวาเดมไมเกน 16 เพราะการกนทในหนวยความจา
เพมเตมภายหลงเปนเรองยงยากและอาจทาใหประสทธภาพในการเขาถงลดลง
StringBuffer(int length) เกบขอความวางเปลาไวในตวแปร
StringBuffer และมขนาดเทากบ length
คลาส StringBuffer
![Page 44: บทที่ 5 ข้อมูลชนิดอาร์เรย์และสตริง 6.1](https://reader031.vdocuments.site/reader031/viewer/2022013105/5578fb64d8b42a675b8b4af5/html5/thumbnails/44.jpg)
เมธอดทนาสนใจสวนหนงของคลาส StringBuffer
StringBuffer append(String s)StringBuffer append(char c)StringBuffer append(chra[] c, int offset, int len)StringBuffer append(booleab b)StringBuffer append(int i)StringBuffer append(long l)StringBuffer append(float f)StringBuffer append(double d)
![Page 45: บทที่ 5 ข้อมูลชนิดอาร์เรย์และสตริง 6.1](https://reader031.vdocuments.site/reader031/viewer/2022013105/5578fb64d8b42a675b8b4af5/html5/thumbnails/45.jpg)
เมธอดนเปนโอเวอรโหลดเมธอด ทาหนาทเพมขอความในวงเลบเขาไปตอทายขอความทม
อยแลวใน StringBuffer ถามการเปลยนแปลง StringBuffer ผานเมธอดขอความจะถกเปลยนแบบถาวร
StringBuffer insert(int offset, String s)StringBuffer insert(int offset, char c)StringBuffer insert(int offset, char[] c)StringBuffer insert(int offset, boolean b)StringBuffer insert(int offset, int i)StringBuffer insert(int offset, long l)StringBuffer insert(int offset, float f)StringBuffer insert(int offset, double b)
![Page 46: บทที่ 5 ข้อมูลชนิดอาร์เรย์และสตริง 6.1](https://reader031.vdocuments.site/reader031/viewer/2022013105/5578fb64d8b42a675b8b4af5/html5/thumbnails/46.jpg)
เมธอดนเปนโอเวอรโหลดเมธอด ทาหนาทแทรกขอความในวงเลบเขาไปในตาแหนงทเทากบ offset
StringBuffer deleteCharAt(int index) เมธอดนจะทาหนาทลบตวอกษรในตาแหนง index ออกStringBuffer delete(int start, int end) เมธอดนจะทาหนาทลบตวอกษรจากตาแหนง start ถง end ออกStringBuffer revers()เมธอดนจะทาหนาทกลบตวตวอกษรจากหลงมาหนาchar charAt(int index) ลงคาตวอกษรในตาแหนง index กลบchar setCharAt(int index, char ch) เปลยนตวอกษรในตาแหนง index ดวย chtoString()สงคาของขอความออกมาในรปตวแปรสตรง
![Page 47: บทที่ 5 ข้อมูลชนิดอาร์เรย์และสตริง 6.1](https://reader031.vdocuments.site/reader031/viewer/2022013105/5578fb64d8b42a675b8b4af5/html5/thumbnails/47.jpg)
//TestString09.javapublic class TestString09 {
public static void main(String[] argd) {StringBuffer s1 = new StringBuffer("banana
split") ;System.out.println("s1 = "+s1);s1.delete(4,12) ; //banaSystem.out.println("s1 = "+s1);s1.append(42) ; // bana42System.out.println("s1 = "+s1);s1.insert(4, "na") ; //banana42System.out.println("s1 = "+s1);s1.setCharAt(0,'s') ; //sanana42System.out.println("s1 = "+s1);s1.reverse() ; //24ananasSystem.out.println("s1 = "+s1);
}}
![Page 48: บทที่ 5 ข้อมูลชนิดอาร์เรย์และสตริง 6.1](https://reader031.vdocuments.site/reader031/viewer/2022013105/5578fb64d8b42a675b8b4af5/html5/thumbnails/48.jpg)
ขอทแตกตางระหวาง StringBuffer และ String คอขนาดของ
StringBuffer ไมจาเปนตองเทากบขนาดของขอความและสามารถเพมหรอลด
ขนาดได เราสามารถตรวจสอบขนาดของ StringBuffer ไดโดยใชเมธอด intcapacity() ซงจะคนคาปจจบนของ StringBuffer ดงตวอยางตอไปน
ขอแตกตางระหวาง StringBuffer และ String
![Page 49: บทที่ 5 ข้อมูลชนิดอาร์เรย์และสตริง 6.1](https://reader031.vdocuments.site/reader031/viewer/2022013105/5578fb64d8b42a675b8b4af5/html5/thumbnails/49.jpg)
//TestString08.javapublic class TestString08 {
public static void main(String[] args) {StringBuffer s1 = new StringBuffer() ; // (1)System.out.println(s1) ;System.out.println(s1.length()) ;System.out.println(s1.capacity()) ;StringBuffer s2 = new StringBuffer("Hello") ; // (2)System.out.println(s2) ;System.out.println(s2.length()) ;System.out.println(s2.capacity()) ;//StringBuffer s3 = "Hello"; // (3) Error
}}
![Page 50: บทที่ 5 ข้อมูลชนิดอาร์เรย์และสตริง 6.1](https://reader031.vdocuments.site/reader031/viewer/2022013105/5578fb64d8b42a675b8b4af5/html5/thumbnails/50.jpg)
จากโคดขางบนในบรรทดท (1) เราสรางตวแปร s1 โดยไมเกบคาอะไรเลย ผลทไดคอ
ขนาดของขอความเทากบ 0 แตขนาดของตวมนเองจรงเปน 16 ซงเปนคาปกต ใน
บรรทดท (2) เราสรางตวแปร s2 โดยใหเกบคา Hello ผลทไดคอขนาดขอความ
เปน 5 แตขนาดของตวมนเองเทากบคาปกตบวกดวยความยาวของขอความทสงใหมน
เกบซงเทากบ 21 นนเอง ในบรรทดท (3) เราพยายามสรางตวแปร s3 ซงเปนวธการ
ทใชไมไดกบตวแปร StringBuffer
เหตทตวแปร StringBuffer มขนาดเทากบ 16 และจะเพมขนาดเมอเกบขอความ
ลงไป เปนเพราะถามการเปลยนแปลงขอความทเกบภายหลง ขอความหใมอาจมขนาดไม
เทาเดม จาวาจงเผอทวางไวอก 16 ทวาง เพอจะไดไมตองกนพนทในหนวยความจา
เพมเตมอกในกรณทขอความใหมมขนาดใหญกวาเดมไมเกน 16 เพราะการกนทใน
หนวยความจาเพมเตมภายหลงทาไดยาก เนองจากพนทในหนวยความจาทเพมขนอาจไม
อยตดกบพนทเดมทาใหประสทธภาพในการเขาถงลดลง
![Page 51: บทที่ 5 ข้อมูลชนิดอาร์เรย์และสตริง 6.1](https://reader031.vdocuments.site/reader031/viewer/2022013105/5578fb64d8b42a675b8b4af5/html5/thumbnails/51.jpg)
แบบฝกหด
1. คาคงทของสตรงจะอยภายใตเครองหมายใด
ก) ‘_’ ข) “_”ค) <_>ง) {_}
2. ในการประกาศตวแปรสตรงนน จะตองคานงถงสงใด
ก) ความยาวของขอมล
ข) จานวนตวอกษร
ค) ลกษณะของขอมล
ง) ประเภทของขอมล
![Page 52: บทที่ 5 ข้อมูลชนิดอาร์เรย์และสตริง 6.1](https://reader031.vdocuments.site/reader031/viewer/2022013105/5578fb64d8b42a675b8b4af5/html5/thumbnails/52.jpg)
3. get(int index) คอmethodอะไรในArraylistก) ใชใสออบเจกตลงในอารเรยทตาแหนง indexข) คนคา index ของออบเจกตทระบ
ค) คนคาออบเจกตในตาแหนง indexง) นาออบเจกตตาแหนง index ออกจากอารเรย
4. ฟงกชนในการ printfซงในภาษา C นน สามารถทจะกาหนดใหขอมลของสตรง เมอเวลาจะ
พมพแสดงนน จะใหอยตดขอบซายหรอขอบขวากได โดยใชเครองหมายในขอใด
ก) –ข) #ค) *ง) /
5. การใชฟงกชนตาง ๆ ทเกยวกบสตรงนนจะตองนาเขาไลบรารไฟลใดเสมอ
ก) strintg.gข) string.thค) strintg.hง) strint.gh
![Page 53: บทที่ 5 ข้อมูลชนิดอาร์เรย์และสตริง 6.1](https://reader031.vdocuments.site/reader031/viewer/2022013105/5578fb64d8b42a675b8b4af5/html5/thumbnails/53.jpg)
6. ขอมลในลกษณะใดทถกตองทสดตอไปนเปนขอมลทเรยกวา อาเรย
ก) เปนขอมลเลขจานวนจรง
ข) เปนขอมลเลขจานวนเตม
ค) เปนขอมลชนดขอความ
ง) เปนขอมลชนดเดยวกนหลายขอมลทใชชอตวแปรเดยวกน
จากอาเรย X]3][4[ = {1, 2, 3, 45, 6, 7, 89, 10, 11, 12}
ตอบคาถามขอ 40 – 417. จากอารเรยทกาหนดให คาของขอมลอาเรย X[1][3] มคาเทากบเทาใด
ก) 3ข) 4ค) 8ง) 11
8. จากอารเรยทกาหนดให คาของขอมลอาเรย X[0][1] + X[2][3] มคาเทากบเทาใด
ก) 4ข) 6ค) 10ง) 14
![Page 54: บทที่ 5 ข้อมูลชนิดอาร์เรย์และสตริง 6.1](https://reader031.vdocuments.site/reader031/viewer/2022013105/5578fb64d8b42a675b8b4af5/html5/thumbnails/54.jpg)
9. strlenเปนฟงกชนเกยวกบอะไร
ก) การคดลอกสตรง
ข) ความยาวของสตรง
ค) การตอสตรง
ง) การหาขนาดของสตรง
10. คาสง READ, READLN, WRITE, WRITELN ซงเปนคาสงรบ
ขอมล และแสดงผลของภาษาใด
ก) ภาษาองกฤษ
ข) ภาษาไทย
ค) ภาษาซ
ง) ภาษาปาสคาล
![Page 55: บทที่ 5 ข้อมูลชนิดอาร์เรย์และสตริง 6.1](https://reader031.vdocuments.site/reader031/viewer/2022013105/5578fb64d8b42a675b8b4af5/html5/thumbnails/55.jpg)
1. ก
2. ก
3. ข
4. ก
5. ค
6. ง
7. ค
8. ง
9. ข
10. ง
เฉลย
![Page 56: บทที่ 5 ข้อมูลชนิดอาร์เรย์และสตริง 6.1](https://reader031.vdocuments.site/reader031/viewer/2022013105/5578fb64d8b42a675b8b4af5/html5/thumbnails/56.jpg)
1. น.ส.กฤตวรรณ แตมประเสรฐ เลขท 132. น.ส.ณฐชยา พลสวสด เลขท 143. น.ส.นพวรรณ ปลาบทอง เลขท 194. น.ส.กาญจนาพร พงศอมพรทพย เลขท 215. น.ส.นภสกร นาควโรจน เลขท 226. น.ส. ลลตา บนลอศรสกล เลขท 23
ชนมธยมศกษาปท 6/1
รายชอสมาชก