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

13,040 views
12,831 views

Published on

0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
13,040
On SlideShare
0
From Embeds
0
Number of Embeds
5
Actions
Shares
0
Downloads
75
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

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

  1. 1. ชันมัธยมศึกษาปี ที 6/1
  2. 2. อาร์เรย์ (Array)  อาร์เรย์ (Array) เป็ นตัวแปรชุดให้ สาหรับเก็บข้ อมูลทีมีความสัมพันธ์กน โดยจะ ํ ัเก็บไว้ ในชือเดียวกัน สมาชิกแต่ละตัวของ Array จะเรียกว่า Element หรือ Cell ตัวเลขทีใช้ ระบุตําแหน่งสมาชิกของ Array เรียกว่า Index หรือ Subscript 5 8 9 7 3 X[0] X[1] X[2] X[3] X[4] ตัวอย่าง Array X ทีมี 5 Element ซึ งจะเริ มต้นตังแต่ Index 0 ถึง 4
  3. 3. ตัวแปรอาร์เรย์แบบ 1 มิติ  อาร์เรย์หนึ งมิติ มีโครงสร้ างเทียบเท่าเมตริ กซ์ขนาด nx1 การประกาศตัวแปรอาร์ เรย์ จะ ใช้เครื องหมาย [ ] ล้อมค่าตัวเลขจํานวนเต็ม เพือบอกจํานวนหน่วยข้อมูลทีต้องการได้ใน รู ป ชนิดของตัวแปร ชือตัวแปร[จํานวนสมาชิกทีต้ องการ] data_type variable_name [ number-of-elements ]เช่น int a[5]; double x, y[10], z[3];
  4. 4. ตัวแปรอาร์เรย์หลายตัว  array) คือ อาร์เรย์ทีมีสมาชิก อาร์เรย์หลายมิติ (Multi-dimensionalเป็ นข้อมูลอาร์เรย์ นันคือ ในหน่วยข้อมูลแต่ละหน่วยของอาร์เรย์ จะเป็ นอาร์ เรย์ยอยๆ ซึง ่อาจจะกําหนดซ้อนลงไปได้หลายชัน การกําหนดอาร์เรย์หลายมิติ จะกระทําในรู ปชนิดตัวแปร ชือตัวแปร[จํานวนสมาชิก][จํานวนสมาชิก]….;การประกาศอาร์ เรย์หลายตัวทําได้ดงนีั int [] abc , xyz; abc = new int[500]; xyz = new int[10];หรื อเขียนรวมกันได้ดงนีั int[] abc = new int[500], xyz = new int[10];
  5. 5. ตัวอย่างอาร์เรย์หลายมิติเช่น อาร์เรย์ทีมีสมาชิกอยู่ 3 ตัว และสมาชิ กแต่ละตัวก็เป็ นอาร์เรย์เก็บข้อมูลชนิด int มีจานวน ํ สมาชิก 2 ตัว จะกําหนดได้ดงนี int a[3][2]; ั ขนาดของอาร์เรย์ 3 x 2  จํานวนไบต์ ทีใช้ในการเก็บอาร์ เรย์ sizeof (a) คํานวณจาก 3 x 2 x sizeof ( int ) = 3x2x4 = 24 ไบต์ จากการกําหนดดังกล่าวจะได้อาร์ เรย์ การจัดวางภายในหน่วยความจํา ทีมีโครงสร้างดังรู ป สามารถแสดงได้ดงรู ป ั a a[0 a[0][0] a[0][1] a[0][0] a[0][1] a[1][0] a[1][1] a[2][0] a[2][1] ] a[1 a[1][0] a[1][1] a a[1] a[2] ] a[0] a[2 a[2][0] a[2][1] ]
  6. 6. การกําหนดคาเริ่มตนใหอารเรย 1 มิติ  สามารถประกาศตัวแปร Array พร้ อมกับกําหนดค่าเริมต้ นให้ กบสมาชิก Array ั ได้ โดยมีรปแบบดังนี ู ชนิดของตัวแปรอาร์ เรย์ ชืออาร์เรย์[จํานวนข้อมูล] = {ค่าคงที,ค่าคงที,…};Type [] var_name = {value1,value2,value3};เช่นint []num = {5,6,9};String []name = {“noom”,”boby”,”goft”};Int []unit = {1}
  7. 7. ตัวอย่างโปรแกรม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]); }}
  8. 8. การเข้ าถึงตัวแปรอาร์ เรย์  เมือมีการประกาศอาร์เรย์แล้ว ค่าตําแหน่งหมายเลขลําดับข้อมูลสําหรับใช้เข้าถึงตัวแปร ย่อยต่างๆ ในอาร์เรย์ จะถูกกําหนดโดยอัตโนมัติ โดยหากกําหนดอาร์ เรย์ดวยขนาด n ข้อมูล หน่วยแรก จะมีค่าตําแหน่งลําดับเป็ น 0 ไป ้ จนถึงข้อมูลหน่วยสุ ดท้ายจะมีค่าตําแหน่งลําดับเป็ น n-1เช่น int v[5]; 3000 3004 3008 3012 3016 v[0] v[1] v[2] v[3] v[4]
  9. 9.  ถ้าต้องการอ่านหรื อเขียนข้อมูลในหน่วยต่างๆ ของตัวแปรอาร์เรย์ จะต้องอ้างชื อตัวแปร ตามด้วยค่าลําดับของหน่วยในกลุ่มข้อมูลอาร์ เรย์ ล้อมด้วยเครื องหมาย [ ] ซึงเรี ยกว่า subscript (หรื อดัชนี index) ค่าดัชนี อาจอยูในรู ป ค่าคงที ของตัวแปร นิพจน์ หรื อฟังก์ชนทีให้ค่าเป็ นค่าจํานวนเต็มก็ ่ ั ได้ ( positive integer >=0 ) ของเขตของ index หรื อ subscript มีค่าตังแต่ 0 ถึง n-1 ( n คือขนาดของ อาร์เรย์)
  10. 10. การใช้คาสังวนรอบ for ในการเข้าถึงค่าในอาร์เรย์ ํ  เราสามารถใช้คาสังวนรอบ 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 valuesn”);for (x=0; x<5; x++){ printf(“a[%d] = %d”, x, a[x]); }
  11. 11. ตัวอย่างโปรแกรม 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];
  12. 12. การส่ งผ่านอาร์เรย์ไปยังฟังก์ชน ัสามารถแบ่งได้เป็ น 2 ลักษณะ การส่งผ่านค่าอีลีเมนต์อาร์เรย์ให้กบฟังก์ชน เป็ นการเรี ยกใช้ฟังก์ชนแบบ ั ั ั Call-by-valueการส่งอาร์เรย์ทุกอีลีเมนต์ให้กบฟังก์ชน เป็ นการเรี ยกใช้ฟังก์ชนแบบ Call- ั ั ั by-reference
  13. 13. การเรี ยกใช้แบบ Call-by-value ชนั โดยผ่านพารามิเตอร์ ใช้วิธีการส่ งค่าของตัวแปร (value) ให้กบฟังก์ ั ไม่ สามารถแก้ ไขค่ าของอาร์ กิวเมนต์ (หรื อพารามิเตอร์ ) ภายในฟั งก์ ชันได้ = การแก้ ไขค่ าต่ างๆใน ฟั งก์ ชัน ไม่ มีผลต่ อตัวแปรที ส่ งค่ ามา ใช้กบฟังก์ชนทีรับค่าเข้าเป็ นตัวแปรธรรมดา (int, float, char,...) ั ั เช่น void triple(int x) { x=x*3; printf(“x = %d”,x); } …. triple(x) ส่ งค่ า 5 ให้ กับฟังก์ ชัน ในฟังก์ ชัน x เริมต้ นเป็ น 5 int x=5, y[2]={10,11}; และถูกทําให้กลายเป็ น 15 หลังจบฟังก์ชัน ค่า x นอกฟังก์ชัน triple(x); triple(y[0]); ไม่เปลียนแปลง triple(y[0]) ส่ งค่า 10 ให้ กับฟังก์ ชัน ในฟังก์ ชัน x เริมต้นเป็ น 10 และถูกทําให้ กลายเป็ น 30 หลังจบฟังก์ ชัน ค่า y[0] ยังเหมือนเดิม
  14. 14. การเรี ยกใช้แบบ Call-by-reference  ใช้วิธีการส่ งค่า แอดเดรส (Address)*** ของตัวแปรไปให้ฟังก์ชน ั ใช้กบฟังก์ชนทีรับค่าเข้าเป็ นอาร์เรย์ ั ั สามารถแก้ไขค่าของอาร์กิวเมนต์ภายในฟังก์ชนได้ = การแก้ ไขค่ าตัวแปรอาร์ เรย์ ภายใน ั ฟั งก์ ชัน มีผลการเปลียนแปลงต่ อตัวแปรทีส่ งค่ ามา เพราะ การมีการจัดการค่ าของหน่ วยความจําในตําแหน่ งเดียวกัน***แอดเดรส (Address) คือ ค่าทีใช้อางถึงตัวข้อมูลภายในหน่วยความจํา เหมือนกับ ้ หมายเลขบ้านเลขที***
  15. 15. ฟังก์ชนทีมีการรับค่าเข้าเป็ นอาร์เรย์ ั  ฟังก์ชันสามารถทีจะรับค่าเข้ าเป็ นอาร์เรย์ได้ ซึงรูปแบบของการเขียนต้ นแบบของฟั งก์ชัน เป็ นดังนี ชนิดข้ อมูล ชือฟั งก์ชัน(ชนิดข้ อมูล ชือตัวแปร[ขนาดอาร์เรย์]); ในกรณีฟังก์ชันมีการรับค่าเข้ าเป็ นอาร์เรย์ 1 มิติ อาจจะไม่ต้องกําหนดขนาดของอาร์เรย์ก ็ ได้ ตัวอย่างเช่น int sum_arr(int num[10]); void print_arr(int a[5]); float average(int num[]);
  16. 16. การส่ งผ่านค่าอีลีเมนต์อาร์เรย์ให้กบ ั ฟังก์ชนั  หากฟังก์ชน my_func มีตนแบบของฟังก์ชนดังนี ั ้ ั void my_func(int x); และใน main ได้มีการประกาศตัวแปรอาร์เรย์ชือว่า num int num[10]; การส่ งอีลีเมนต์ที 0 ของอาร์ เรย์ num ไปเป็ นอาร์ กิวเมนต์ของฟังก์ชน my_func ั สามารถเขียนได้ดงนี ั my_func(num[0]);
  17. 17. ตัวอย่างที 1 : การส่ งค่าแต่ละอีลเี มนต์ใน อาร์เรย์ให้กบฟังก์ชน ั ั  #include <stdio.h> 2 : Positive 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 : Positiven",x); else printf("%d : Negativen",x) ; }
  18. 18. ตัวอย่างที 2: การส่ งค่าแต่ละอีลเี มนต์ใน อาร์เรย์ให้กบฟังก์ชน ั ั#include <stdio.h> void check_val(int x); 2 : Positiveint main() -1 : Negative{ 5 : Positive 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 : Positiven",x); else printf("%d : Negativen",x);}
  19. 19. ตัวอย่างที 3 : การส่ งค่าแต่ละอีลเี มนต์ใน อาร์เรย์ให้กบฟังก์ชน ั ั#include <stdio.h> void showVal(int val); /* function prototype */void main(){ int nums[5] = {2, 18, 1, 27, 16}; showVal(nums[0]);} Value is 2void showVal(int val) /* show a value */{ printf("Value is %dn", val);}
  20. 20. การส่ งอาร์เรย์ทุกอีลีเมนต์ของอาร์เรย์ ให้กบฟังก์ชน ั ั  การส่ งอาร์เรย์ในกรณี นี ใช้แค่ชือตัวแปรอาร์ เรย์เท่านัน เช่น หากใน main มีการ ประกาศอาร์เรย์ดงนี ั int num[10]; และฟังก์ชน print_arr มีตนแบบฟังก์ชนดังนี ั ้ ั void print_arr(int a[10]); การส่ งอาร์เรย์ num ทุกอีลีเมนต์ไปให้ฟังก์ชน print_arr สามารถเขียนได้ดงนี ั ั print_arr(num);
  21. 21. ตัวอย่างที 1: การส่ งอาร์เรย์ทุกอีลีเมนต์ ให้กบฟังก์ชน ั ั#include <stdio.h>  5 2 -1 8void 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]);}
  22. 22. ตัวอย่างที 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]; The maximum value is 27 for ( i = 1; i < 5; ++i) if (max < vals[i]) max = vals[i]; printf("The maximum value is %dn", max);}
  23. 23. อาร์เรย์ของออบเจ็กต์  อาร์เรย์สามารถเก็บ reference ของ Object ได้ โดยกําหนดให้ อาเรย์ เป็ น Class นัน ๆ ในตอนประกาศอาเรย์ มีรปแบบดังนี ู className [] arrayName = new className[size];เช่น Student [] studentList = new Student[10];
  24. 24. Student [] studentList = new Student[3];studentList[0] = new Student(); studentList[1] = new Student();studentList[2] = new Student(); studentList Student Object studentList[0] Student studentList[1] Object studentList[2] Student Object
  25. 25. อาร์เรย์แบบ 2 มิติ โดยสรุ ป  สําหรับอาร์ เรย์สองมิติ เมืออ้างชืออาร์เรย์ จะหมายถึงตําแหน่งเริ มต้นของอาร์ เรย์ ทังหมด (อาร์เรย์ 2 มิติ) เมืออ้างชืออาร์เรย์พร้อมสมาชิกหนึ งอันดับ จะหมายถึงตําแหน่งเริ มต้นของอาร์ เรย์ยอยภายใน ่ (อาร์เรย์ 1 มิติ) เมืออ้างชืออาร์เรย์พร้อมค่าสองอันดับ จะหมายถึง ข้อมูลภายในอาร์ เรย์ อาเรย์ 2 มิติ X[0][0] X[0][1] X[0][2] X[0][3] X[0][4] X[1][0] X[1][1] X[1][2] X[1][3] X[1][4]
  26. 26. การประกาศตัวแปรอาร์ เรย์ 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[3] . . code[5][0] code[5][3]
  27. 27. ตัวอย่ างการเข้ าถึงตัวแปรอาร์ เรย์ 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];
  28. 28. การใช้คาสัง for ในการเข้าถึงอาร์เรย์ 2 ํ มิติ  ใช้ลูป for 2 ชัน โดยลูปชันนอกวนรอบตามจํานวนแถว ส่ วนลูปชันในวนรอบตาม จํานวนหลัก ต้องมีตวนับ 2 ตัว คือ ตัวนับแถวและตัวนับหลัก ั ตัวอย่างเช่น 0 1 2 int i,j,x[2][3]; 0 0 1 2 for(i=0;i<2;i++) 1 1 2 3 for(j=0;j<3;j++) x[i][j] = i+j;
  29. 29. ตัวอย่างที 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 %2dn",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) Display all elements of array printf("%2d ", val[i][j]); 8 16 9 52 } 3 15 27 6 return 0; 14 25 2 10} 8 16 9 52 3 15 27 6 14 25 2 10
  30. 30. ตัวอย่างที 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]); } Enter a[0][0]: 10 } Enter a[0][1]: 20 for(i=0;i<2;i++) { Enter a[0][2]: 30 for(j=0;j<3;j++) Enter a[1][0]: 40 printf("%d",a[i][j]); Enter a[1][1]: 50 printf("n"); Enter a[1][2]: 60 } 10 20 30 return 0; 40 50 60}
  31. 31. การให้ค่าเริ มต้น (Array Initialization)  เราจะใช้กลุ่มค่าคงทีทีมีสมาชิกเป็ นกลุ่มค่าคงทีย่อย ซึ งเป็ นชนิ ดเดียว กันและมีขนาดเท่ากัน รวมถึงสอดคล้องกับชนิดของอาร์ เรย์ดวย ้ โดยใช้เครื องหมาย {} หรื อ , ในการแบ่งแยกแต่ละแถว
  32. 32. ตัวอย่ างการให้ ค่าเริมต้ น (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 };
  33. 33. ะกําหนดจํานวนแถวโดยนับจากทีกําหนด หากไม่มีการกําหนดจํานวนแถว คอมไพเลอร์จ ในค่าเริ มต้น แต่จะต้องมีการกําหนดจํานวนหลักเสมอ เช่น int a[][2] = {{5,8},{9},{-1}}; 0 1 0 5 8 1 9 0 2 -1 0
  34. 34.  ในการกําหนดค่าเริ มต้นของอาร์เรย์ 2 มิติ สามารถละเครื องหมายปี กกาทีใช้แบ่งแถวได้ โดยใช้จานวนหลักในการจัดว่าอีลีเมนต์ใดอยูแถวใด ํ ่  6.9, 7.2 };เช่น float x[2][3] = { 2.5, 1.25, 8.6,4.1, 0 1 2 0 2.5 1.25 8.6 1 4.1 6.9 7.2
  35. 35. Class ArrayList  ในภาษา Java มีกลุ่มคลาสทีเรียกว่า คอลเล็กชัน (Collection) ซึงออบเจ็กต์จากคลาสนีสามารถใช้สะสมออบเจ็กต์ต่าง ๆ ไว้ได้ เช่น Class ArrayList ดีกว่าArray ทีสามารถเพิมสมาชิกได้ โดยไม่ตองประกาศไว้ล่วงหน้า ้การใช้ Class ArrayList จะต้อง import java.util.ArrayListตัวอย่างการสร้างออบเจ็กต์ จาก Class ArrayList ArrayList nameList = new ArrayList();
  36. 36. Method ทีสําคัญของ ArrayList  add(int index,Object obj) ใช้ใส่ออบเจ็กต์ลงในอาร์เรย์ทตําแหน่ ง index ี remove(int index) นําออบเจ็กต์ตําแหน่ง index ออกจากอาร์เรย์ get(int index) คืนค่าออบเจ็กต์ในตําแหน่ง index indexof(Object obj) คืนค่า index ของออบเจ็กต์ทระบุ ี size สําหรับหาขนาดของ ArrayList
  37. 37. ตัวอย่างโปรแกรมimport java.util.ArrayList; //เรียกใช้ คลาส ArrayListpublic 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()); //แสดงขนาดของอาร์เรย์ }}
  38. 38. String  String คือขอความ หรือ สายของอักขระ ในภาษา C++ ไมมีตัว แปร ประเภท String แตจะมีตัวแปรประเภท char ใหใชแทน ซึ่งตัว แปร ประเภทchar จะสามารถเก็บอักขระได 1 อักขระ เทานั้นถาหาก เราอยากใหตัวแปร char สามารถเก็บขอความไดเราก็สามารถ ทําให ตัวแปร char เปน array ได char Name[10];
  39. 39. ตัวอยางเชน char Name[10];ความหมายวา  ตัวแปร ชื่อ Name เปนตัวแปรประเภท char สามารถเก็บอักขระได 9 ตัวอักษรสาเหตุที่เก็บ ได 9 ตัวอักษรก็เพราะวา ในกรณีที่เราใชตัวแปร char เปน array เพื่อเก็บขอความ Compiler จะเหลือเนื้อที่ตําแหนงสุดทายไวเก็บอักขระ นัล เพื่อใหรูวาเปนการจบ String เพราะฉะนั้นรูปแบบการประกาศตัวแปร char ที่เปน Stringจึงเปนแบบนี้ char ชื่อตัวแปร[จํานวนอักษร+1];ถาเราตองการประกาศตัวแปร char ที่เปน String ไวเก็บขอมูลชื่อที่มีไดมากสุด 30 ตัวอักษรก็ใหประกาศดังนี้ char Name[31];หรือถาเรา จะประกาศตัวแปร char ที่เปน String ไวเก็บขอมูลชื่อเดือนมีไดมากสุด 20 ตัวอักษรก็ใหประกาศดังนี้ char Month[21];
  40. 40. การเปรียบเทียบ Stringใชเครื่องหมาย = = เปนการเปรียบเทียบวา String 2 ตัวเปนเดียวกันหรือไม โดยจะ Object เปรียบเทียบคาอางอิงหรือที่อยูในหนวยความจําของตัวแปรทั้งสอง ไมไดเปนการ เปรียบเทียบถึงขอมูลที่ String ทั้ง 2 ตัววาเก็บขอมูลเดียวกันหรือไม รูปแบบคําสั่ง ตัวอยางการใชงาน String1 == String2; String datastring1 = “Motorcycle”; String datastring2 = datastring1; ............................................. ............................................. if(datastring1 == datastring2) System.out.println(“เปน Object เดียวกัน”); else System.out.println(“ไมไดเปน Object เดียวกัน”);
  41. 41. equals() methodเปนการเปรียบเทียบคาใน String Object ทั้ง 2 ตัวเปนคาเดียวกันหรือไม โดยที่จะใหคาเปนจริง (True) ก็ตอเมื่อตัวอักษรทุกตัวใน String ทั้ง 2 คาจะตองเหมือนกันหมด โดยสนใจตัวอักษรพิมพเล็กและพิมพใหญดวย หากตางกันก็จะใหคาเปนเท็จ (False) รูปแบบคําสั่ง ตัวอยางการใชงานString1.equals(String2); String datastring1 = “Motorcycle”; String datastring2 = “Motorcycle”;หากไมสนวาตัวอักษรที่อยูภายใน String ....................................................จะเปนตัวเล็กหรือตัวใหญ ถาตองการตรวจสอบเพียงการเหมือนทางรูปรางก็ใช ...................................................method equalsIgnoreCase() if (datastring1.equals(datastring2)) System.out.println(“มีคาเทากัน”); else System.out.println(“มีคาไมเทากัน”);
  42. 42. compareTo method การเปรียบเทียบความไมเทากันของ String โดยจะใหคาที่ไดจากการ เปรียบเทียบแบงเปน 3 คาคือ  - เปนลบ (-) ถาคาแรกนอยกวาคาที่สอง ตัวอยางการใชงาน - เปนบวก (+) ถาคาแรกมากกวาคาที่สอง ถากําหนดให - เปนศูนย (0) ถาคาเทากัน datastring1 เปน “abc”; datastring2 เปน “abf”; รูปแบบคําสั่ง String1.compareTo(String2); เขียนคําสั่งดังนี้ datastring1.compareTo(datastring2); ผลลัพธที่ไดจะออกมาเปน -3 หมายถึง ตําแหนงที่ 2 ของ object แรกมีคานอย กวาตําแหนงที่ 2 ของ object ที่ 2 (c<f)
  43. 43. คลาส StringBuffer คลาส StringBuffer จะมีลักษณะคล้ ายกับคลาส String เพียงแต่เป็ นตัวแปร  สตริงทีมีการแก้ ไขค่าแบบถาวร คอนสตรักเตอร์ของคลาส StringBuffer ทีน่าสนใจ มีดังต่อไปนี  StringBuffer(String s) เก็บสตริง s ไว้ ในตัวแปร StringBuffer  StringBuffer() เก็บข้ อความว่างเปล่าไว้ ในตัวแปร StringBuffer และมีขนาด 16 byte เหตุทตัวแปร StringBuffer มีขนาดปกติ 16 และจะเพิมขนาดเมือเก็บ ี ข้ อความลงไป เป็ นเพราะถ้ ามีการเปลียนข้ อความทีเก็บภายหลัง ข้ อความใหม่อาจมีขนาดไม่ เท่าเดิม ดังนันจาวาจึงว่างไว้ อก 16 ทีว่างเพือจะได้ ไม่ต้องกันทีในหน่วยความจําเพิมเติมอีก ี ในกรณีทข้ อความใหม่มีขนาดใหญ่กว่าเดิมไม่เกิน 16 เพราะการกันทีในหน่วยความจํา ี เพิมเติมภายหลังเป็ นเรืองยุ่งยากและอาจทําให้ ประสิทธิภาพในการเข้ าถึงลดลง  StringBuffer(int length) เก็บข้ อความว่างเปล่าไว้ ในตัวแปร StringBuffer และมีขนาดเท่ากับ length
  44. 44.  เมธอดที่นาสนใจสวนหนึ่งของคลาส StringBufferStringBuffer 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)
  45. 45.  เมธอดนี้เปนโอเวอรโหลดเมธอด ทําหนาที่เพิ่มขอความในวงเล็บเขาไปตอทายขอความที่มี อยูแลวใน 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)
  46. 46.  เมธอดนี้เปนโอเวอรโหลดเมธอด ทําหนาที่แทรกขอความในวงเล็บเขาไปในตําแหนงที่ เทากับ offset าหนาที่ลบตัวอักษรในตําแหนง index ออกStringBuffer deleteCharAt(int index) เมธอดนี้จะทํStringBuffer delete(int start, int end) เมธอดนี้จะทําหนาที่ลบตัวอักษรจากตําแหนง start ถึงend ออกStringBuffer revers()เมธอดนี้จะทําหนาที่กลับตัวตัวอักษรจากหลังมาหนาchar charAt(int index) ลงคาตัวอักษรในตําแหนง index กลับchar setCharAt(int index, char ch) เปลี่ยนตัวอักษรในตําแหนง index ดวย chtoString()สงคาของขอความออกมาในรูปตัวแปรสตริง
  47. 47. //TestString09.javapublic class TestString09 { public static void main(String[] argd) {  StringBuffer s1 = new StringBuffer("bananasplit") ; System.out.println("s1 = "+s1); s1.delete(4,12) ; //bana System.out.println("s1 = "+s1); s1.append(42) ; // bana42 System.out.println("s1 = "+s1); s1.insert(4, "na") ; //banana42 System.out.println("s1 = "+s1); s1.setCharAt(0,s) ; //sanana42 System.out.println("s1 = "+s1); s1.reverse() ; //24ananas System.out.println("s1 = "+s1); }}
  48. 48. ขอแตกตางระหวาง StringBuffer และ String  ข้ อทีแตกต่างระหว่าง StringBuffer และ String คือขนาดของ StringBuffer ไม่จาเป็ นต้ องเท่ากับขนาดของข้ อความและสามารถเพิมหรือลด ํ ขนาดได้ เราสามารถตรวจสอบขนาดของ StringBuffer ได้ โดยใช้ เมธอด int capacity() ซึงจะคืนค่าปัจจุบันของ StringBuffer ดังตัวอย่างต่อไปนี
  49. 49. //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 }}
  50. 50.  จากโค้ ดข้ างบนในบรรทัดที (1) เราสร้ างตัวแปร s1 โดยไม่เก็บค่าอะไรเลย ผลทีได้ คือ ขนาดของข้ อความเท่ากับ 0 แต่ขนาดของตัวมันเองจริงเป็ น 16 ซึงเป็ นค่าปกติ ใน  บรรทัดที (2) เราสร้ างตัวแปร s2 โดยให้ เก็บค่า Hello ผลทีได้ คือขนาดข้ อความ เป็ น 5 แต่ขนาดของตัวมันเองเท่ากับค่าปกติบวกด้ วยความยาวของข้ อความทีสังให้ มัน เก็บซึงเท่ากับ 21 นันเอง ในบรรทัดที (3) เราพยายามสร้ างตัวแปร s3 ซึงเป็ นวิธการ ี ทีใช้ ไม่ได้ กบตัวแปร StringBuffer ั เหตุทตัวแปร StringBuffer มีขนาดเท่ากับ 16 และจะเพิมขนาดเมือเก็บข้ อความ ี ลงไป เป็ นเพราะถ้ ามีการเปลียนแปลงข้ อความทีเก็บภายหลัง ข้ อความหใม่อาจมีขนาดไม่ เท่าเดิม จาวาจึงเผือทีว่างไว้ อก 16 ทีว่าง เพือจะได้ ไม่ต้องกันพืนทีในหน่วยความจํา ี เพิมเติมอีกในกรณีทข้ อความใหม่มีขนาดใหญ่ กว่าเดิมไม่เกิน 16 เพราะการกันทีใน ี หน่วยความจําเพิมเติมภายหลังทําได้ ยาก เนืองจากพืนทีในหน่วยความจําทีเพิมขึนอาจไม่ อยู่ติดกับพืนทีเดิมทําให้ ประสิทธิภาพในการเข้ าถึงลดลง
  51. 51. แบบฝึ กหัด1. ค่าคงทีของสตริงจะอยู่ภายใต้ เครืองหมายใด ก) ‘_’  ข) “_” ค) <_> ง) {_}2. ในการประกาศตัวแปรสตริงนัน จะต้ องคํานึงถึงสิงใด ก) ความยาวของข้ อมูล ข) จํานวนตัวอักษร ค) ลักษณะของข้ อมูล ง) ประเภทของข้ อมูล
  52. 52. 3. get(int index) คือmethodอะไรในArraylist ก) ใช้ ใส่ออบเจ็กต์ลงในอาร์เรย์ทตําแหน่ง index ี ข) คืนค่า index ของออบเจ็กต์ทระบุ ี ค) คืนค่าออบเจ็กต์ในตําแหน่ง index ง)  นําออบเจ็กต์ตาแหน่ง index ออกจากอาร์เรย์ ํ4. ฟังก์ชันในการ printfซึงในภาษา C นัน สามารถทีจะกําหนดให้ ข้อมูลของสตริง เมือเวลาจะ พิมพ์แสดงนัน จะให้ อยู่ติดขอบซ้ ายหรือขอบขวาก็ได้ โดยใช้ เครืองหมายในข้ อใด ก) – ข) # ค) * ง) /5. การใช้ ฟังก์ชันต่าง ๆ ทีเกียวกับสตริงนันจะต้ องนําเข้ าไลบรารีไฟล์ใดเสมอ ก) strintg.g ข) string.th ค) strintg.h ง) strint.gh
  53. 53. 6. ข้ อมูลในลักษณะใดทีถูกต้ องทีสุดต่อไปนีเป็ นข้ อมูลทีเรียกว่า อาเรย์ ก) เป็ นข้ อมูลเลขจํานวนจริง ข) เป็ นข้ อมูลเลขจํานวนเต็ม ค) เป็ นข้ อมูลชนิดข้ อความ ง) เป็ นข้ อมูลชนิดเดียวกันหลายข้ อมูลทีใช้ ชือตัวแปรเดียวกันจากอาเรย์ X]3][4[ = {1, 2, 3, 4 5, 6, 7, 8  9, 10, 11, 12}ตอบคําถามข้ อ 40 – 417. จากอาร์เรย์ทกําหนดให้ ค่าของข้ อมูลอาเรย์ X[1][3] มีค่าเท่ากับเท่าใด ี ก) 3 ข) 4 ค) 8 ง) 118. จากอาร์เรย์ทกําหนดให้ ค่าของข้ อมูลอาเรย์ X[0][1] + X[2][3] มีค่าเท่ากับเท่าใด ี ก) 4 ข) 6 ค) 10 ง) 14
  54. 54. 9. strlenเป็ นฟั งก์ชันเกียวกับอะไร ก) การคัดลอกสตริง ข) ความยาวของสตริง ค) การต่อสตริง  ง) การหาขนาดของสตริง10. คําสัง READ, READLN, WRITE, WRITELN ซึงเป็ นคําสังรับ ข้ อมูล และแสดงผลของภาษาใด ก) ภาษาอังกฤษ ข) ภาษาไทย ค) ภาษาซี ง) ภาษาปาสคาล
  55. 55. เฉลย1. ก 2. ก3. ข4. ก5. ค6. ง7. ค8. ง9. ข10. ง
  56. 56. รายชือสมาชิก 1. น.ส.กฤตวรรณ แต้ มประเสริฐ เลขที 132. น.ส.ณัฐชยา พลูสวัสดิ เลขที 143. น.ส.นพวรรณ ปลาบู่ทอง เลขที 194. น.ส.กาญจนาพร พงศ์อมพรทิพย์ ั เลขที 215. น.ส.นภัสกร นาควิโรจน์ เลขที 226. น.ส. ลลิตา บันลือศรีสกุล เลขที 23 ชันมัธยมศึกษาปี ที 6/1

×