More Related Content Similar to บทที่ 5 ข้อมูลชนิดอาร์เรย์และสตริง 6.1 (20) More from Little Tukta Lita (9) บทที่ 5 ข้อมูลชนิดอาร์เรย์และสตริง 6.12. อาร์เรย์ (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. ตัวแปรอาร์เรย์แบบ 1 มิติ
อาร์เรย์หนึ งมิติ มีโครงสร้ างเทียบเท่าเมตริ กซ์ขนาด nx1 การประกาศตัวแปรอาร์ เรย์ จะ
ใช้เครื องหมาย [ ] ล้อมค่าตัวเลขจํานวนเต็ม เพือบอกจํานวนหน่วยข้อมูลทีต้องการได้ใน
รู ป
ชนิดของตัวแปร ชือตัวแปร[จํานวนสมาชิกทีต้ องการ]
data_type variable_name [ number-of-elements ]
เช่น int a[5];
double x, y[10], z[3];
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. ตัวอย่างอาร์เรย์หลายมิติ
เช่น อาร์เรย์ทีมีสมาชิกอยู่ 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. การกําหนดคาเริ่มตนใหอารเรย 1 มิติ
สามารถประกาศตัวแปร Array พร้ อมกับกําหนดค่าเริมต้ นให้ กบสมาชิก Array
ั
ได้ โดยมีรปแบบดังนี
ู
ชนิดของตัวแปรอาร์ เรย์ ชืออาร์เรย์[จํานวนข้อมูล] = {ค่าคงที,ค่าคงที,…};
Type [] var_name = {value1,value2,value3};
เช่น
int []num = {5,6,9};
String []name = {“noom”,”boby”,”goft”};
Int []unit = {1}
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. การเข้ าถึงตัวแปรอาร์ เรย์
เมือมีการประกาศอาร์เรย์แล้ว ค่าตําแหน่งหมายเลขลําดับข้อมูลสําหรับใช้เข้าถึงตัวแปร
ย่อยต่างๆ ในอาร์เรย์ จะถูกกําหนดโดยอัตโนมัติ
โดยหากกําหนดอาร์ เรย์ดวยขนาด n ข้อมูล หน่วยแรก จะมีค่าตําแหน่งลําดับเป็ น 0 ไป
้
จนถึงข้อมูลหน่วยสุ ดท้ายจะมีค่าตําแหน่งลําดับเป็ น n-1
เช่น int v[5];
3000 3004 3008 3012 3016
v[0] v[1] v[2] v[3] v[4]
9.
ถ้าต้องการอ่านหรื อเขียนข้อมูลในหน่วยต่างๆ ของตัวแปรอาร์เรย์ จะต้องอ้างชื อตัวแปร
ตามด้วยค่าลําดับของหน่วยในกลุ่มข้อมูลอาร์ เรย์ ล้อมด้วยเครื องหมาย [ ] ซึงเรี ยกว่า
subscript (หรื อดัชนี index)
ค่าดัชนี อาจอยูในรู ป ค่าคงที ของตัวแปร นิพจน์ หรื อฟังก์ชนทีให้ค่าเป็ นค่าจํานวนเต็มก็
่ ั
ได้ ( positive integer >=0 )
ของเขตของ index หรื อ subscript มีค่าตังแต่ 0 ถึง n-1 ( n คือขนาดของ
อาร์เรย์)
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. ตัวอย่างโปรแกรม
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. การส่ งผ่านอาร์เรย์ไปยังฟังก์ชน
ั
สามารถแบ่งได้เป็ น 2 ลักษณะ
การส่งผ่านค่าอีลีเมนต์อาร์เรย์ให้กบฟังก์ชน เป็ นการเรี ยกใช้ฟังก์ชนแบบ
ั ั ั
Call-by-value
การส่งอาร์เรย์ทุกอีลีเมนต์ให้กบฟังก์ชน เป็ นการเรี ยกใช้ฟังก์ชนแบบ Call-
ั ั ั
by-reference
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. การเรี ยกใช้แบบ Call-by-reference
ใช้วิธีการส่ งค่า แอดเดรส (Address)*** ของตัวแปรไปให้ฟังก์ชน ั
ใช้กบฟังก์ชนทีรับค่าเข้าเป็ นอาร์เรย์
ั ั
สามารถแก้ไขค่าของอาร์กิวเมนต์ภายในฟังก์ชนได้ = การแก้ ไขค่ าตัวแปรอาร์ เรย์ ภายใน
ั
ฟั งก์ ชัน มีผลการเปลียนแปลงต่ อตัวแปรทีส่ งค่ ามา
เพราะ การมีการจัดการค่ าของหน่ วยความจําในตําแหน่ งเดียวกัน
***แอดเดรส (Address) คือ ค่าทีใช้อางถึงตัวข้อมูลภายในหน่วยความจํา เหมือนกับ
้
หมายเลขบ้านเลขที***
15. ฟังก์ชนทีมีการรับค่าเข้าเป็ นอาร์เรย์
ั
ฟังก์ชันสามารถทีจะรับค่าเข้ าเป็ นอาร์เรย์ได้ ซึงรูปแบบของการเขียนต้ นแบบของฟั งก์ชัน
เป็ นดังนี
ชนิดข้ อมูล ชือฟั งก์ชัน(ชนิดข้ อมูล ชือตัวแปร[ขนาดอาร์เรย์]);
ในกรณีฟังก์ชันมีการรับค่าเข้ าเป็ นอาร์เรย์ 1 มิติ อาจจะไม่ต้องกําหนดขนาดของอาร์เรย์ก ็
ได้
ตัวอย่างเช่น
int sum_arr(int num[10]);
void print_arr(int a[5]);
float average(int num[]);
16. การส่ งผ่านค่าอีลีเมนต์อาร์เรย์ให้กบ
ั
ฟังก์ชนั
หากฟังก์ชน my_func มีตนแบบของฟังก์ชนดังนี
ั ้ ั
void my_func(int x);
และใน main ได้มีการประกาศตัวแปรอาร์เรย์ชือว่า num
int num[10];
การส่ งอีลีเมนต์ที 0 ของอาร์ เรย์ num ไปเป็ นอาร์ กิวเมนต์ของฟังก์ชน my_func
ั
สามารถเขียนได้ดงนี ั
my_func(num[0]);
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. ตัวอย่างที 2: การส่ งค่าแต่ละอีลเี มนต์ใน
อาร์เรย์ให้กบฟังก์ชน
ั ั
#include <stdio.h>
void check_val(int x); 2 : Positive
int 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. ตัวอย่างที 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 2
void showVal(int val) /* show a value */
{
printf("Value is %dn", val);
}
20. การส่ งอาร์เรย์ทุกอีลีเมนต์ของอาร์เรย์
ให้กบฟังก์ชน
ั ั
การส่ งอาร์เรย์ในกรณี นี ใช้แค่ชือตัวแปรอาร์ เรย์เท่านัน เช่น หากใน main มีการ
ประกาศอาร์เรย์ดงนี
ั
int num[10];
และฟังก์ชน print_arr มีตนแบบฟังก์ชนดังนี
ั ้ ั
void print_arr(int a[10]);
การส่ งอาร์เรย์ num ทุกอีลีเมนต์ไปให้ฟังก์ชน print_arr สามารถเขียนได้ดงนี
ั ั
print_arr(num);
21. ตัวอย่างที 1: การส่ งอาร์เรย์ทุกอีลีเมนต์
ให้กบฟังก์ชน
ั ั
#include <stdio.h>
5 2 -1 8
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]);
}
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. อาร์เรย์ของออบเจ็กต์
อาร์เรย์สามารถเก็บ reference ของ Object ได้ โดยกําหนดให้ อาเรย์
เป็ น Class นัน ๆ ในตอนประกาศอาเรย์ มีรปแบบดังนี
ู
className [] arrayName = new className[size];
เช่น
Student [] studentList = new Student[10];
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. อาร์เรย์แบบ 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. การประกาศตัวแปรอาร์ เรย์ 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. ตัวอย่ างการเข้ าถึงตัวแปรอาร์ เรย์ 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. การใช้คาสัง 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. ตัวอย่างที 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. ตัวอย่างที 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. การให้ค่าเริ มต้น (Array
Initialization)
เราจะใช้กลุ่มค่าคงทีทีมีสมาชิกเป็ นกลุ่มค่าคงทีย่อย ซึ งเป็ นชนิ ดเดียว กันและมีขนาดเท่ากัน
รวมถึงสอดคล้องกับชนิดของอาร์ เรย์ดวย ้
โดยใช้เครื องหมาย {} หรื อ , ในการแบ่งแยกแต่ละแถว
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 };
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. Class ArrayList
ในภาษา Java มีกลุ่มคลาสทีเรียกว่า คอลเล็กชัน (Collection) ซึงออบเจ็กต์
จากคลาสนีสามารถใช้สะสมออบเจ็กต์ต่าง ๆ ไว้ได้ เช่น Class ArrayList ดีกว่า
Array ทีสามารถเพิมสมาชิกได้ โดยไม่ตองประกาศไว้ล่วงหน้า
้
การใช้ Class ArrayList จะต้อง import java.util.ArrayList
ตัวอย่างการสร้างออบเจ็กต์ จาก Class ArrayList
ArrayList nameList = new ArrayList();
36. Method ทีสําคัญของ ArrayList
add(int index,Object obj)
ใช้ใส่ออบเจ็กต์ลงในอาร์เรย์ทตําแหน่ ง index
ี
remove(int index)
นําออบเจ็กต์ตําแหน่ง index ออกจากอาร์เรย์
get(int index)
คืนค่าออบเจ็กต์ในตําแหน่ง index
indexof(Object obj)
คืนค่า index ของออบเจ็กต์ทระบุ ี
size
สําหรับหาขนาดของ ArrayList
37. ตัวอย่างโปรแกรม
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());
//แสดงขนาดของอาร์เรย์
}
}
38. String
String คือขอความ หรือ สายของอักขระ ในภาษา C++ ไมมีตัว
แปร ประเภท String แตจะมีตัวแปรประเภท char ใหใชแทน ซึ่งตัว
แปร ประเภทchar จะสามารถเก็บอักขระได 1 อักขระ เทานั้นถาหาก
เราอยากใหตัวแปร char สามารถเก็บขอความไดเราก็สามารถ ทําให
ตัวแปร char เปน array ได char Name[10];
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. การเปรียบเทียบ 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. 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. compareTo method
การเปรียบเทียบความไมเทากันของ String โดยจะใหคาที่ไดจากการ
เปรียบเทียบแบงเปน 3 คาคือ
- เปนลบ (-) ถาคาแรกนอยกวาคาที่สอง ตัวอยางการใชงาน
- เปนบวก (+) ถาคาแรกมากกวาคาที่สอง ถากําหนดให
- เปนศูนย (0) ถาคาเทากัน datastring1 เปน “abc”;
datastring2 เปน “abf”;
รูปแบบคําสั่ง
String1.compareTo(String2); เขียนคําสั่งดังนี้
datastring1.compareTo(datastring2);
ผลลัพธที่ไดจะออกมาเปน -3 หมายถึง ตําแหนงที่ 2
ของ object แรกมีคานอย กวาตําแหนงที่ 2 ของ object
ที่ 2 (c<f)
43. คลาส StringBuffer
คลาส StringBuffer จะมีลักษณะคล้ ายกับคลาส String เพียงแต่เป็ นตัวแปร
สตริงทีมีการแก้ ไขค่าแบบถาวร คอนสตรักเตอร์ของคลาส StringBuffer ทีน่าสนใจ
มีดังต่อไปนี
StringBuffer(String s) เก็บสตริง s ไว้ ในตัวแปร StringBuffer
StringBuffer() เก็บข้ อความว่างเปล่าไว้ ในตัวแปร StringBuffer และมีขนาด
16 byte เหตุทตัวแปร StringBuffer มีขนาดปกติ 16 และจะเพิมขนาดเมือเก็บ
ี
ข้ อความลงไป เป็ นเพราะถ้ ามีการเปลียนข้ อความทีเก็บภายหลัง ข้ อความใหม่อาจมีขนาดไม่
เท่าเดิม ดังนันจาวาจึงว่างไว้ อก 16 ทีว่างเพือจะได้ ไม่ต้องกันทีในหน่วยความจําเพิมเติมอีก
ี
ในกรณีทข้ อความใหม่มีขนาดใหญ่กว่าเดิมไม่เกิน 16 เพราะการกันทีในหน่วยความจํา
ี
เพิมเติมภายหลังเป็ นเรืองยุ่งยากและอาจทําให้ ประสิทธิภาพในการเข้ าถึงลดลง
StringBuffer(int length) เก็บข้ อความว่างเปล่าไว้ ในตัวแปร
StringBuffer และมีขนาดเท่ากับ length
44. เมธอดที่นาสนใจสวนหนึ่งของคลาส 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)
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. เมธอดนี้เปนโอเวอรโหลดเมธอด ทําหนาที่แทรกขอความในวงเล็บเขาไปในตําแหนงที่
เทากับ 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. //TestString09.java
public class TestString09 {
public static void main(String[] argd) {
StringBuffer s1 = new StringBuffer("banana
split") ;
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. ขอแตกตางระหวาง StringBuffer และ String
ข้ อทีแตกต่างระหว่าง StringBuffer และ String คือขนาดของ
StringBuffer ไม่จาเป็ นต้ องเท่ากับขนาดของข้ อความและสามารถเพิมหรือลด
ํ
ขนาดได้ เราสามารถตรวจสอบขนาดของ StringBuffer ได้ โดยใช้ เมธอด int
capacity() ซึงจะคืนค่าปัจจุบันของ StringBuffer ดังตัวอย่างต่อไปนี
49. //TestString08.java
public 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. จากโค้ ดข้ างบนในบรรทัดที (1) เราสร้ างตัวแปร s1 โดยไม่เก็บค่าอะไรเลย ผลทีได้ คือ
ขนาดของข้ อความเท่ากับ 0 แต่ขนาดของตัวมันเองจริงเป็ น 16 ซึงเป็ นค่าปกติ ใน
บรรทัดที (2) เราสร้ างตัวแปร s2 โดยให้ เก็บค่า Hello ผลทีได้ คือขนาดข้ อความ
เป็ น 5 แต่ขนาดของตัวมันเองเท่ากับค่าปกติบวกด้ วยความยาวของข้ อความทีสังให้ มัน
เก็บซึงเท่ากับ 21 นันเอง ในบรรทัดที (3) เราพยายามสร้ างตัวแปร s3 ซึงเป็ นวิธการ
ี
ทีใช้ ไม่ได้ กบตัวแปร StringBuffer
ั
เหตุทตัวแปร StringBuffer มีขนาดเท่ากับ 16 และจะเพิมขนาดเมือเก็บข้ อความ
ี
ลงไป เป็ นเพราะถ้ ามีการเปลียนแปลงข้ อความทีเก็บภายหลัง ข้ อความหใม่อาจมีขนาดไม่
เท่าเดิม จาวาจึงเผือทีว่างไว้ อก 16 ทีว่าง เพือจะได้ ไม่ต้องกันพืนทีในหน่วยความจํา
ี
เพิมเติมอีกในกรณีทข้ อความใหม่มีขนาดใหญ่ กว่าเดิมไม่เกิน 16 เพราะการกันทีใน
ี
หน่วยความจําเพิมเติมภายหลังทําได้ ยาก เนืองจากพืนทีในหน่วยความจําทีเพิมขึนอาจไม่
อยู่ติดกับพืนทีเดิมทําให้ ประสิทธิภาพในการเข้ าถึงลดลง
51. แบบฝึ กหัด
1. ค่าคงทีของสตริงจะอยู่ภายใต้ เครืองหมายใด
ก) ‘_’
ข) “_”
ค) <_>
ง) {_}
2. ในการประกาศตัวแปรสตริงนัน จะต้ องคํานึงถึงสิงใด
ก) ความยาวของข้ อมูล
ข) จํานวนตัวอักษร
ค) ลักษณะของข้ อมูล
ง) ประเภทของข้ อมูล
52. 3. get(int index) คือmethodอะไรในArraylist
ก) ใช้ ใส่ออบเจ็กต์ลงในอาร์เรย์ทตําแหน่ง index
ี
ข) คืนค่า index ของออบเจ็กต์ทระบุ ี
ค) คืนค่าออบเจ็กต์ในตําแหน่ง index
ง)
นําออบเจ็กต์ตาแหน่ง index ออกจากอาร์เรย์
ํ
4. ฟังก์ชันในการ printfซึงในภาษา C นัน สามารถทีจะกําหนดให้ ข้อมูลของสตริง เมือเวลาจะ
พิมพ์แสดงนัน จะให้ อยู่ติดขอบซ้ ายหรือขอบขวาก็ได้ โดยใช้ เครืองหมายในข้ อใด
ก) –
ข) #
ค) *
ง) /
5. การใช้ ฟังก์ชันต่าง ๆ ทีเกียวกับสตริงนันจะต้ องนําเข้ าไลบรารีไฟล์ใดเสมอ
ก) strintg.g
ข) string.th
ค) strintg.h
ง) strint.gh
53. 6. ข้ อมูลในลักษณะใดทีถูกต้ องทีสุดต่อไปนีเป็ นข้ อมูลทีเรียกว่า อาเรย์
ก) เป็ นข้ อมูลเลขจํานวนจริง
ข) เป็ นข้ อมูลเลขจํานวนเต็ม
ค) เป็ นข้ อมูลชนิดข้ อความ
ง) เป็ นข้ อมูลชนิดเดียวกันหลายข้ อมูลทีใช้ ชือตัวแปรเดียวกัน
จากอาเรย์ X]3][4[ = {1, 2, 3, 4
5, 6, 7, 8
9, 10, 11, 12}
ตอบคําถามข้ อ 40 – 41
7. จากอาร์เรย์ทกําหนดให้ ค่าของข้ อมูลอาเรย์ X[1][3] มีค่าเท่ากับเท่าใด
ี
ก) 3
ข) 4
ค) 8
ง) 11
8. จากอาร์เรย์ทกําหนดให้ ค่าของข้ อมูลอาเรย์ X[0][1] + X[2][3] มีค่าเท่ากับเท่าใด
ี
ก) 4
ข) 6
ค) 10
ง) 14
54. 9. strlenเป็ นฟั งก์ชันเกียวกับอะไร
ก) การคัดลอกสตริง
ข) ความยาวของสตริง
ค) การต่อสตริง
ง) การหาขนาดของสตริง
10. คําสัง READ, READLN, WRITE, WRITELN ซึงเป็ นคําสังรับ
ข้ อมูล และแสดงผลของภาษาใด
ก) ภาษาอังกฤษ
ข) ภาษาไทย
ค) ภาษาซี
ง) ภาษาปาสคาล
55. เฉลย
1. ก
2. ก
3. ข
4. ก
5. ค
6. ง
7. ค
8. ง
9. ข
10. ง
56. รายชือสมาชิก
1. น.ส.กฤตวรรณ แต้ มประเสริฐ เลขที 13
2. น.ส.ณัฐชยา พลูสวัสดิ เลขที 14
3. น.ส.นพวรรณ ปลาบู่ทอง เลขที 19
4. น.ส.กาญจนาพร พงศ์อมพรทิพย์
ั เลขที 21
5. น.ส.นภัสกร นาควิโรจน์ เลขที 22
6. น.ส. ลลิตา บันลือศรีสกุล เลขที 23
ชันมัธยมศึกษาปี ที 6/1