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

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

on

  • 6,910 views

 

Statistics

Views

Total Views
6,910
Views on SlideShare
6,910
Embed Views
0

Actions

Likes
1
Downloads
27
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

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

    • ชันมัธยมศึกษาปี ที 6/1
    • อาร์เรย์ (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
    • ตัวแปรอาร์เรย์แบบ 1 มิติ  อาร์เรย์หนึ งมิติ มีโครงสร้ างเทียบเท่าเมตริ กซ์ขนาด nx1 การประกาศตัวแปรอาร์ เรย์ จะ ใช้เครื องหมาย [ ] ล้อมค่าตัวเลขจํานวนเต็ม เพือบอกจํานวนหน่วยข้อมูลทีต้องการได้ใน รู ป ชนิดของตัวแปร ชือตัวแปร[จํานวนสมาชิกทีต้ องการ] data_type variable_name [ number-of-elements ]เช่น int a[5]; double x, y[10], z[3];
    • ตัวแปรอาร์เรย์หลายตัว  array) คือ อาร์เรย์ทีมีสมาชิก อาร์เรย์หลายมิติ (Multi-dimensionalเป็ นข้อมูลอาร์เรย์ นันคือ ในหน่วยข้อมูลแต่ละหน่วยของอาร์เรย์ จะเป็ นอาร์ เรย์ยอยๆ ซึง ่อาจจะกําหนดซ้อนลงไปได้หลายชัน การกําหนดอาร์เรย์หลายมิติ จะกระทําในรู ปชนิดตัวแปร ชือตัวแปร[จํานวนสมาชิก][จํานวนสมาชิก]….;การประกาศอาร์ เรย์หลายตัวทําได้ดงนีั int [] abc , xyz; abc = new int[500]; xyz = new int[10];หรื อเขียนรวมกันได้ดงนีั int[] abc = new int[500], xyz = new int[10];
    • ตัวอย่างอาร์เรย์หลายมิติเช่น อาร์เรย์ทีมีสมาชิกอยู่ 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] ]
    • การกําหนดคาเริ่มตนใหอารเรย 1 มิติ  สามารถประกาศตัวแปร Array พร้ อมกับกําหนดค่าเริมต้ นให้ กบสมาชิก Array ั ได้ โดยมีรปแบบดังนี ู ชนิดของตัวแปรอาร์ เรย์ ชืออาร์เรย์[จํานวนข้อมูล] = {ค่าคงที,ค่าคงที,…};Type [] var_name = {value1,value2,value3};เช่นint []num = {5,6,9};String []name = {“noom”,”boby”,”goft”};Int []unit = {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]); }}
    • การเข้ าถึงตัวแปรอาร์ เรย์  เมือมีการประกาศอาร์เรย์แล้ว ค่าตําแหน่งหมายเลขลําดับข้อมูลสําหรับใช้เข้าถึงตัวแปร ย่อยต่างๆ ในอาร์เรย์ จะถูกกําหนดโดยอัตโนมัติ โดยหากกําหนดอาร์ เรย์ดวยขนาด n ข้อมูล หน่วยแรก จะมีค่าตําแหน่งลําดับเป็ น 0 ไป ้ จนถึงข้อมูลหน่วยสุ ดท้ายจะมีค่าตําแหน่งลําดับเป็ น n-1เช่น int v[5]; 3000 3004 3008 3012 3016 v[0] v[1] v[2] v[3] v[4]
    •  ถ้าต้องการอ่านหรื อเขียนข้อมูลในหน่วยต่างๆ ของตัวแปรอาร์เรย์ จะต้องอ้างชื อตัวแปร ตามด้วยค่าลําดับของหน่วยในกลุ่มข้อมูลอาร์ เรย์ ล้อมด้วยเครื องหมาย [ ] ซึงเรี ยกว่า subscript (หรื อดัชนี index) ค่าดัชนี อาจอยูในรู ป ค่าคงที ของตัวแปร นิพจน์ หรื อฟังก์ชนทีให้ค่าเป็ นค่าจํานวนเต็มก็ ่ ั ได้ ( positive integer >=0 ) ของเขตของ index หรื อ subscript มีค่าตังแต่ 0 ถึง n-1 ( n คือขนาดของ อาร์เรย์)
    • การใช้คาสังวนรอบ 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]); }
    • ตัวอย่างโปรแกรม 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];
    • การส่ งผ่านอาร์เรย์ไปยังฟังก์ชน ัสามารถแบ่งได้เป็ น 2 ลักษณะ การส่งผ่านค่าอีลีเมนต์อาร์เรย์ให้กบฟังก์ชน เป็ นการเรี ยกใช้ฟังก์ชนแบบ ั ั ั Call-by-valueการส่งอาร์เรย์ทุกอีลีเมนต์ให้กบฟังก์ชน เป็ นการเรี ยกใช้ฟังก์ชนแบบ Call- ั ั ั by-reference
    • การเรี ยกใช้แบบ 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] ยังเหมือนเดิม
    • การเรี ยกใช้แบบ Call-by-reference  ใช้วิธีการส่ งค่า แอดเดรส (Address)*** ของตัวแปรไปให้ฟังก์ชน ั ใช้กบฟังก์ชนทีรับค่าเข้าเป็ นอาร์เรย์ ั ั สามารถแก้ไขค่าของอาร์กิวเมนต์ภายในฟังก์ชนได้ = การแก้ ไขค่ าตัวแปรอาร์ เรย์ ภายใน ั ฟั งก์ ชัน มีผลการเปลียนแปลงต่ อตัวแปรทีส่ งค่ ามา เพราะ การมีการจัดการค่ าของหน่ วยความจําในตําแหน่ งเดียวกัน***แอดเดรส (Address) คือ ค่าทีใช้อางถึงตัวข้อมูลภายในหน่วยความจํา เหมือนกับ ้ หมายเลขบ้านเลขที***
    • ฟังก์ชนทีมีการรับค่าเข้าเป็ นอาร์เรย์ ั  ฟังก์ชันสามารถทีจะรับค่าเข้ าเป็ นอาร์เรย์ได้ ซึงรูปแบบของการเขียนต้ นแบบของฟั งก์ชัน เป็ นดังนี ชนิดข้ อมูล ชือฟั งก์ชัน(ชนิดข้ อมูล ชือตัวแปร[ขนาดอาร์เรย์]); ในกรณีฟังก์ชันมีการรับค่าเข้ าเป็ นอาร์เรย์ 1 มิติ อาจจะไม่ต้องกําหนดขนาดของอาร์เรย์ก ็ ได้ ตัวอย่างเช่น int sum_arr(int num[10]); void print_arr(int a[5]); float average(int num[]);
    • การส่ งผ่านค่าอีลีเมนต์อาร์เรย์ให้กบ ั ฟังก์ชนั  หากฟังก์ชน my_func มีตนแบบของฟังก์ชนดังนี ั ้ ั void my_func(int x); และใน main ได้มีการประกาศตัวแปรอาร์เรย์ชือว่า num int num[10]; การส่ งอีลีเมนต์ที 0 ของอาร์ เรย์ num ไปเป็ นอาร์ กิวเมนต์ของฟังก์ชน my_func ั สามารถเขียนได้ดงนี ั my_func(num[0]);
    • ตัวอย่างที 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) ; }
    • ตัวอย่างที 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);}
    • ตัวอย่างที 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);}
    • การส่ งอาร์เรย์ทุกอีลีเมนต์ของอาร์เรย์ ให้กบฟังก์ชน ั ั  การส่ งอาร์เรย์ในกรณี นี ใช้แค่ชือตัวแปรอาร์ เรย์เท่านัน เช่น หากใน main มีการ ประกาศอาร์เรย์ดงนี ั int num[10]; และฟังก์ชน print_arr มีตนแบบฟังก์ชนดังนี ั ้ ั void print_arr(int a[10]); การส่ งอาร์เรย์ num ทุกอีลีเมนต์ไปให้ฟังก์ชน print_arr สามารถเขียนได้ดงนี ั ั print_arr(num);
    • ตัวอย่างที 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]);}
    • ตัวอย่างที 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);}
    • อาร์เรย์ของออบเจ็กต์  อาร์เรย์สามารถเก็บ 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(); studentList Student Object studentList[0] Student studentList[1] Object studentList[2] Student Object
    • อาร์เรย์แบบ 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]
    • การประกาศตัวแปรอาร์ เรย์ 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]
    • ตัวอย่ างการเข้ าถึงตัวแปรอาร์ เรย์ 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];
    • การใช้คาสัง 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;
    • ตัวอย่างที 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
    • ตัวอย่างที 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}
    • การให้ค่าเริ มต้น (Array Initialization)  เราจะใช้กลุ่มค่าคงทีทีมีสมาชิกเป็ นกลุ่มค่าคงทีย่อย ซึ งเป็ นชนิ ดเดียว กันและมีขนาดเท่ากัน รวมถึงสอดคล้องกับชนิดของอาร์ เรย์ดวย ้ โดยใช้เครื องหมาย {} หรื อ , ในการแบ่งแยกแต่ละแถว
    • ตัวอย่ างการให้ ค่าเริมต้ น (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 };
    • ะกําหนดจํานวนแถวโดยนับจากทีกําหนด หากไม่มีการกําหนดจํานวนแถว คอมไพเลอร์จ ในค่าเริ มต้น แต่จะต้องมีการกําหนดจํานวนหลักเสมอ เช่น int a[][2] = {{5,8},{9},{-1}}; 0 1 0 5 8 1 9 0 2 -1 0
    •  ในการกําหนดค่าเริ มต้นของอาร์เรย์ 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
    • Class ArrayList  ในภาษา Java มีกลุ่มคลาสทีเรียกว่า คอลเล็กชัน (Collection) ซึงออบเจ็กต์จากคลาสนีสามารถใช้สะสมออบเจ็กต์ต่าง ๆ ไว้ได้ เช่น Class ArrayList ดีกว่าArray ทีสามารถเพิมสมาชิกได้ โดยไม่ตองประกาศไว้ล่วงหน้า ้การใช้ Class ArrayList จะต้อง import java.util.ArrayListตัวอย่างการสร้างออบเจ็กต์ จาก Class ArrayList ArrayList nameList = new ArrayList();
    • Method ทีสําคัญของ ArrayList  add(int index,Object obj) ใช้ใส่ออบเจ็กต์ลงในอาร์เรย์ทตําแหน่ ง index ี remove(int index) นําออบเจ็กต์ตําแหน่ง index ออกจากอาร์เรย์ get(int index) คืนค่าออบเจ็กต์ในตําแหน่ง index indexof(Object obj) คืนค่า index ของออบเจ็กต์ทระบุ ี size สําหรับหาขนาดของ ArrayList
    • ตัวอย่างโปรแกรม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()); //แสดงขนาดของอาร์เรย์ }}
    • String  String คือขอความ หรือ สายของอักขระ ในภาษา C++ ไมมีตัว แปร ประเภท String แตจะมีตัวแปรประเภท char ใหใชแทน ซึ่งตัว แปร ประเภทchar จะสามารถเก็บอักขระได 1 อักขระ เทานั้นถาหาก เราอยากใหตัวแปร char สามารถเก็บขอความไดเราก็สามารถ ทําให ตัวแปร char เปน array ได char Name[10];
    • ตัวอยางเชน 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];
    • การเปรียบเทียบ 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 เดียวกัน”);
    • 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(“มีคาไมเทากัน”);
    • compareTo method การเปรียบเทียบความไมเทากันของ String โดยจะใหคาที่ไดจากการ เปรียบเทียบแบงเปน 3 คาคือ  - เปนลบ (-) ถาคาแรกนอยกวาคาที่สอง ตัวอยางการใชงาน - เปนบวก (+) ถาคาแรกมากกวาคาที่สอง ถากําหนดให - เปนศูนย (0) ถาคาเทากัน datastring1 เปน “abc”; datastring2 เปน “abf”; รูปแบบคําสั่ง String1.compareTo(String2); เขียนคําสั่งดังนี้ datastring1.compareTo(datastring2); ผลลัพธที่ไดจะออกมาเปน -3 หมายถึง ตําแหนงที่ 2 ของ object แรกมีคานอย กวาตําแหนงที่ 2 ของ object ที่ 2 (c<f)
    • คลาส StringBuffer คลาส StringBuffer จะมีลักษณะคล้ ายกับคลาส String เพียงแต่เป็ นตัวแปร  สตริงทีมีการแก้ ไขค่าแบบถาวร คอนสตรักเตอร์ของคลาส StringBuffer ทีน่าสนใจ มีดังต่อไปนี  StringBuffer(String s) เก็บสตริง s ไว้ ในตัวแปร StringBuffer  StringBuffer() เก็บข้ อความว่างเปล่าไว้ ในตัวแปร StringBuffer และมีขนาด 16 byte เหตุทตัวแปร StringBuffer มีขนาดปกติ 16 และจะเพิมขนาดเมือเก็บ ี ข้ อความลงไป เป็ นเพราะถ้ ามีการเปลียนข้ อความทีเก็บภายหลัง ข้ อความใหม่อาจมีขนาดไม่ เท่าเดิม ดังนันจาวาจึงว่างไว้ อก 16 ทีว่างเพือจะได้ ไม่ต้องกันทีในหน่วยความจําเพิมเติมอีก ี ในกรณีทข้ อความใหม่มีขนาดใหญ่กว่าเดิมไม่เกิน 16 เพราะการกันทีในหน่วยความจํา ี เพิมเติมภายหลังเป็ นเรืองยุ่งยากและอาจทําให้ ประสิทธิภาพในการเข้ าถึงลดลง  StringBuffer(int length) เก็บข้ อความว่างเปล่าไว้ ในตัวแปร StringBuffer และมีขนาดเท่ากับ length
    •  เมธอดที่นาสนใจสวนหนึ่งของคลาส 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)
    •  เมธอดนี้เปนโอเวอรโหลดเมธอด ทําหนาที่เพิ่มขอความในวงเล็บเขาไปตอทายขอความที่มี อยูแลวใน 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)
    •  เมธอดนี้เปนโอเวอรโหลดเมธอด ทําหนาที่แทรกขอความในวงเล็บเขาไปในตําแหนงที่ เทากับ 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()สงคาของขอความออกมาในรูปตัวแปรสตริง
    • //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); }}
    • ขอแตกตางระหวาง StringBuffer และ String  ข้ อทีแตกต่างระหว่าง StringBuffer และ String คือขนาดของ StringBuffer ไม่จาเป็ นต้ องเท่ากับขนาดของข้ อความและสามารถเพิมหรือลด ํ ขนาดได้ เราสามารถตรวจสอบขนาดของ StringBuffer ได้ โดยใช้ เมธอด int capacity() ซึงจะคืนค่าปัจจุบันของ StringBuffer ดังตัวอย่างต่อไปนี
    • //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 }}
    •  จากโค้ ดข้ างบนในบรรทัดที (1) เราสร้ างตัวแปร s1 โดยไม่เก็บค่าอะไรเลย ผลทีได้ คือ ขนาดของข้ อความเท่ากับ 0 แต่ขนาดของตัวมันเองจริงเป็ น 16 ซึงเป็ นค่าปกติ ใน  บรรทัดที (2) เราสร้ างตัวแปร s2 โดยให้ เก็บค่า Hello ผลทีได้ คือขนาดข้ อความ เป็ น 5 แต่ขนาดของตัวมันเองเท่ากับค่าปกติบวกด้ วยความยาวของข้ อความทีสังให้ มัน เก็บซึงเท่ากับ 21 นันเอง ในบรรทัดที (3) เราพยายามสร้ างตัวแปร s3 ซึงเป็ นวิธการ ี ทีใช้ ไม่ได้ กบตัวแปร StringBuffer ั เหตุทตัวแปร StringBuffer มีขนาดเท่ากับ 16 และจะเพิมขนาดเมือเก็บข้ อความ ี ลงไป เป็ นเพราะถ้ ามีการเปลียนแปลงข้ อความทีเก็บภายหลัง ข้ อความหใม่อาจมีขนาดไม่ เท่าเดิม จาวาจึงเผือทีว่างไว้ อก 16 ทีว่าง เพือจะได้ ไม่ต้องกันพืนทีในหน่วยความจํา ี เพิมเติมอีกในกรณีทข้ อความใหม่มีขนาดใหญ่ กว่าเดิมไม่เกิน 16 เพราะการกันทีใน ี หน่วยความจําเพิมเติมภายหลังทําได้ ยาก เนืองจากพืนทีในหน่วยความจําทีเพิมขึนอาจไม่ อยู่ติดกับพืนทีเดิมทําให้ ประสิทธิภาพในการเข้ าถึงลดลง
    • แบบฝึ กหัด1. ค่าคงทีของสตริงจะอยู่ภายใต้ เครืองหมายใด ก) ‘_’  ข) “_” ค) <_> ง) {_}2. ในการประกาศตัวแปรสตริงนัน จะต้ องคํานึงถึงสิงใด ก) ความยาวของข้ อมูล ข) จํานวนตัวอักษร ค) ลักษณะของข้ อมูล ง) ประเภทของข้ อมูล
    • 3. get(int index) คือmethodอะไรในArraylist ก) ใช้ ใส่ออบเจ็กต์ลงในอาร์เรย์ทตําแหน่ง index ี ข) คืนค่า index ของออบเจ็กต์ทระบุ ี ค) คืนค่าออบเจ็กต์ในตําแหน่ง index ง)  นําออบเจ็กต์ตาแหน่ง index ออกจากอาร์เรย์ ํ4. ฟังก์ชันในการ printfซึงในภาษา C นัน สามารถทีจะกําหนดให้ ข้อมูลของสตริง เมือเวลาจะ พิมพ์แสดงนัน จะให้ อยู่ติดขอบซ้ ายหรือขอบขวาก็ได้ โดยใช้ เครืองหมายในข้ อใด ก) – ข) # ค) * ง) /5. การใช้ ฟังก์ชันต่าง ๆ ทีเกียวกับสตริงนันจะต้ องนําเข้ าไลบรารีไฟล์ใดเสมอ ก) strintg.g ข) string.th ค) strintg.h ง) strint.gh
    • 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
    • 9. strlenเป็ นฟั งก์ชันเกียวกับอะไร ก) การคัดลอกสตริง ข) ความยาวของสตริง ค) การต่อสตริง  ง) การหาขนาดของสตริง10. คําสัง READ, READLN, WRITE, WRITELN ซึงเป็ นคําสังรับ ข้ อมูล และแสดงผลของภาษาใด ก) ภาษาอังกฤษ ข) ภาษาไทย ค) ภาษาซี ง) ภาษาปาสคาล
    • เฉลย1. ก 2. ก3. ข4. ก5. ค6. ง7. ค8. ง9. ข10. ง
    • รายชือสมาชิก 1. น.ส.กฤตวรรณ แต้ มประเสริฐ เลขที 132. น.ส.ณัฐชยา พลูสวัสดิ เลขที 143. น.ส.นพวรรณ ปลาบู่ทอง เลขที 194. น.ส.กาญจนาพร พงศ์อมพรทิพย์ ั เลขที 215. น.ส.นภัสกร นาควิโรจน์ เลขที 226. น.ส. ลลิตา บันลือศรีสกุล เลขที 23 ชันมัธยมศึกษาปี ที 6/1