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

56
ชั Êนมัธยมศึกษาปีที É 6/1

Upload: little-tukta-lita

Post on 11-Jun-2015

10.623 views

Category:

Documents


0 download

TRANSCRIPT

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

ชนมธยมศกษาปท 6/1

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

อารเรย (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

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

ชนดของตวแปร ชอตวแปร[จานวนสมาชกทตองการ]data_type variable_name [ number-of-elements ]

เชน int a[5];double x, y[10], z[3];

ตวแปรอารเรยแบบ 1 มต

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

อารเรยหลายมต (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

ตวอยางอารเรยหลายมตเชน อารเรยทมสมาชกอย 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

สามารถประกาศตวแปร 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

ตวอยางโปรแกรม

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

เมอมการประกาศอารเรยแลว คาตาแหนงหมายเลขลาดบขอมลสาหรบใชเขาถงตวแปร

ยอยตางๆ ในอารเรย จะถกกาหนดโดยอตโนมต

โดยหากกาหนดอารเรยดวยขนาด 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

ถาตองการอานหรอเขยนขอมลในหนวยตางๆ ของตวแปรอารเรย จะตองอางชอตวแปร

ตามดวยคาลาดบของหนวยในกลมขอมลอารเรย ลอมดวยเครองหมาย [ ] ซงเรยกวา

subscript (หรอดชน index) คาดชน อาจอยในรป คาคงท ของตวแปร นพจน หรอฟงกชนทใหคาเปนคาจานวนเตมก

ได ( positive integer >=0 ) ของเขตของ index หรอ subscript มคาตงแต 0 ถง n-1 ( n คอขนาดของ

อารเรย)

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

เราสามารถใชคาสงวนรอบ 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

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

การสงผานอารเรยไปยงฟงกชน

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

การสงผานคาอลเมนตอารเรยใหกบฟงกชน เปนการเรยกใชฟงกชนแบบ

Call-by-valueการสงอารเรยทกอลเมนตใหกบฟงกชน เปนการเรยกใชฟงกชนแบบ Call-

by-reference

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

การเรยกใชแบบ 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

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

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

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

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

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

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

หมายเลขบานเลขท***

การเรยกใชแบบ Call-by-reference

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

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

ฟงกชนสามารถทจะรบคาเขาเปนอารเรยได ซงรปแบบของการเขยนตนแบบของฟงกชน

เปนดงน

ชนดขอมล ชอฟงกชน(ชนดขอมล ชอตวแปร[ขนาดอารเรย]); ในกรณฟงกชนมการรบคาเขาเปนอารเรย 1 มต อาจจะไมตองกาหนดขนาดของอารเรยก

ได

ตวอยางเชน

int sum_arr(int num[10]);

void print_arr(int a[5]);float average(int num[]);

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

การสงผานคาอลเมนตอารเรยใหกบ

ฟงกชน

หากฟงกชน 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

ตวอยางท 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

ตวอยางท 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

ตวอยางท 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

การสงอารเรยทกอลเมนตของอารเรย

ใหกบฟงกชน

การสงอารเรยในกรณน ใชแคชอตวแปรอารเรยเทานน เชน หากใน main มการประกาศอารเรยดงน

int num[10];

และฟงกชน print_arr มตนแบบฟงกชนดงน

void print_arr(int a[10]); การสงอารเรย num ทกอลเมนตไปใหฟงกชน print_arr สามารถเขยนไดดงน

print_arr(num);

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

ตวอยางท 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

ตวอยางท 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

อารเรยสามารถเกบ reference ของ Object ได โดยกาหนดใหอาเรย

เปน Class นน ๆ ในตอนประกาศอาเรย มรปแบบดงน

className [] arrayName = new className[size];

เชน

Student [] studentList = new Student[10];

อารเรยของออบเจกต

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

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

อารเรยแบบ 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

การประกาศตวแปรอารเรย 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

ตวอยางการเขาถงตวแปรอารเรย 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

การใชคาสง 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

ตวอยางท 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

ตวอยางท 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

การใหคาเรมตน (Array Initialization)

เราจะใชกลมคาคงททมสมาชกเปนกลมคาคงทยอย ซงเปนชนดเดยว กนและมขนาดเทากน

รวมถงสอดคลองกบชนดของอารเรยดวย

โดยใชเครองหมาย {} หรอ , ในการแบงแยกแตละแถว

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

ตวอยางการใหคาเรมตน (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

หากไมมการกาหนดจานวนแถว คอมไพเลอรจะกาหนดจานวนแถวโดยนบจากทกาหนด

ในคาเรมตน แตจะตองมการกาหนดจานวนหลกเสมอ เชน

int a[][2] = {{5,8},{9},{-1}};

5 8

9 0

0 1

0

1

-1 02

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

ในการกาหนดคาเรมตนของอารเรย 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

ในภาษา Java มกลมคลาสทเรยกวา คอลเลกชน (Collection) ซงออบเจกต

จากคลาสนสามารถใชสะสมออบเจกตตาง ๆ ไวได เชน Class ArrayList ดกวา

Array ทสามารถเพมสมาชกได โดยไมตองประกาศไวลวงหนา

การใช Class ArrayList จะตอง import java.util.ArrayListตวอยางการสรางออบเจกต จาก Class ArrayList

Class ArrayList

ArrayList nameList = new ArrayList();

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

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

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

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

แปร ประเภท String แตจะมตวแปรประเภท char ใหใชแทน ซงตวแปร ประเภทchar จะสามารถเกบอกขระได 1 อกขระ เทานนถาหากเราอยากใหตวแปร char สามารถเกบขอความไดเรากสามารถ ทาใหตวแปร char เปน array ได char Name[10];

String

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

ความหมายวา ตวแปร ชอ 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

ใชเครองหมาย = =เปนการเปรยบเทยบวา 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

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

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

คลาส 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

เมธอดทนาสนใจสวนหนงของคลาส 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

เมธอดนเปนโอเวอรโหลดเมธอด ทาหนาทเพมขอความในวงเลบเขาไปตอทายขอความทม

อยแลวใน 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

เมธอดนเปนโอเวอรโหลดเมธอด ทาหนาทแทรกขอความในวงเลบเขาไปในตาแหนงทเทากบ 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

//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

ขอทแตกตางระหวาง StringBuffer และ String คอขนาดของ

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

ขนาดได เราสามารถตรวจสอบขนาดของ StringBuffer ไดโดยใชเมธอด intcapacity() ซงจะคนคาปจจบนของ StringBuffer ดงตวอยางตอไปน

ขอแตกตางระหวาง StringBuffer และ String

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

//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

จากโคดขางบนในบรรทดท (1) เราสรางตวแปร s1 โดยไมเกบคาอะไรเลย ผลทไดคอ

ขนาดของขอความเทากบ 0 แตขนาดของตวมนเองจรงเปน 16 ซงเปนคาปกต ใน

บรรทดท (2) เราสรางตวแปร s2 โดยใหเกบคา Hello ผลทไดคอขนาดขอความ

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

เกบซงเทากบ 21 นนเอง ในบรรทดท (3) เราพยายามสรางตวแปร s3 ซงเปนวธการ

ทใชไมไดกบตวแปร StringBuffer

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

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

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

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

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

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

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

แบบฝกหด

1. คาคงทของสตรงจะอยภายใตเครองหมายใด

ก) ‘_’ ข) “_”ค) <_>ง) {_}

2. ในการประกาศตวแปรสตรงนน จะตองคานงถงสงใด

ก) ความยาวของขอมล

ข) จานวนตวอกษร

ค) ลกษณะของขอมล

ง) ประเภทของขอมล

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

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

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

9. strlenเปนฟงกชนเกยวกบอะไร

ก) การคดลอกสตรง

ข) ความยาวของสตรง

ค) การตอสตรง

ง) การหาขนาดของสตรง

10. คาสง READ, READLN, WRITE, WRITELN ซงเปนคาสงรบ

ขอมล และแสดงผลของภาษาใด

ก) ภาษาองกฤษ

ข) ภาษาไทย

ค) ภาษาซ

ง) ภาษาปาสคาล

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

1. ก

2. ก

3. ข

4. ก

5. ค

6. ง

7. ค

8. ง

9. ข

10. ง

เฉลย

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

1. น.ส.กฤตวรรณ แตมประเสรฐ เลขท 132. น.ส.ณฐชยา พลสวสด เลขท 143. น.ส.นพวรรณ ปลาบทอง เลขท 194. น.ส.กาญจนาพร พงศอมพรทพย เลขท 215. น.ส.นภสกร นาควโรจน เลขท 226. น.ส. ลลตา บนลอศรสกล เลขท 23

ชนมธยมศกษาปท 6/1

รายชอสมาชก