บทที่ 5 ข้อมูลชนิดอาร์เรย์และสตริง...
TRANSCRIPT
ชนมธยมศกษาปท 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
อารเรยหนงมต มโครงสรางเทยบเทาเมตรกซขนาด nx1 การประกาศตวแปรอารเรย จะใชเครองหมาย [ ] ลอมคาตวเลขจานวนเตม เพอบอกจานวนหนวยขอมลทตองการไดในรป
ชนดของตวแปร ชอตวแปร[จานวนสมาชกทตองการ]data_type variable_name [ number-of-elements ]
เชน int a[5];double x, y[10], z[3];
ตวแปรอารเรยแบบ 1 มต
อารเรยหลายมต (Multi-dimensional array) คอ อารเรยทมสมาชก
เปนขอมลอารเรย นนคอ ในหนวยขอมลแตละหนวยของอารเรย จะเปนอารเรยยอยๆ ซง
อาจจะกาหนดซอนลงไปไดหลายชน
การกาหนดอารเรยหลายมต จะกระทาในรป
ชนดตวแปร ชอตวแปร[จานวนสมาชก][จานวนสมาชก]….;
ตวแปรอารเรยหลายตว
การประกาศอารเรยหลายตวทาไดดงน
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[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]
การจดวางภายในหนวยความจา
สามารถแสดงไดดงรป
สามารถประกาศตวแปร Array พรอมกบกาหนดคาเรมตนใหกบสมาชก Array
ไดโดยมรปแบบดงน
ชนดของตวแปรอารเรย ชออารเรย[จานวนขอมล] = {คาคงท,คาคงท,…};
เชน
การกาหนดคาเรมตนใหอารเรย 1 มต
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];
การเขาถงตวแปรอารเรย
v[0] v[1] v[2] v[3] v[4]
3000 3004 3008 3012 3016
ถาตองการอานหรอเขยนขอมลในหนวยตางๆ ของตวแปรอารเรย จะตองอางชอตวแปร
ตามดวยคาลาดบของหนวยในกลมขอมลอารเรย ลอมดวยเครองหมาย [ ] ซงเรยกวา
subscript (หรอดชน index) คาดชน อาจอยในรป คาคงท ของตวแปร นพจน หรอฟงกชนทใหคาเปนคาจานวนเตมก
ได ( positive integer >=0 ) ของเขตของ index หรอ subscript มคาตงแต 0 ถง n-1 ( n คอขนาดของ
อารเรย)
เราสามารถใชคาสงวนรอบ 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 ในการเขาถงคาในอารเรย
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];
การสงผานอารเรยไปยงฟงกชน
สามารถแบงไดเปน 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); }….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] ยงเหมอนเดม
ใชวธการสงคา แอดเดรส (Address)*** ของตวแปรไปใหฟงกชน
ใชกบฟงกชนทรบคาเขาเปนอารเรย
สามารถแกไขคาของอารกวเมนตภายในฟงกชนได = การแกไขคาตวแปรอารเรย ภายใน
ฟงกชน มผลการเปลยนแปลงตอตวแปรทสงคามา
เพราะ การมการจดการคาของหนวยความจาในตาแหนงเดยวกน
***แอดเดรส (Address) คอ คาทใชอางถงตวขอมลภายในหนวยความจา เหมอนกบ
หมายเลขบานเลขท***
การเรยกใชแบบ Call-by-reference
ฟงกชนทมการรบคาเขาเปนอารเรย
ฟงกชนสามารถทจะรบคาเขาเปนอารเรยได ซงรปแบบของการเขยนตนแบบของฟงกชน
เปนดงน
ชนดขอมล ชอฟงกชน(ชนดขอมล ชอตวแปร[ขนาดอารเรย]); ในกรณฟงกชนมการรบคาเขาเปนอารเรย 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>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
ตวอยางท 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
ตวอยางท 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
การสงอารเรยทกอลเมนตของอารเรย
ใหกบฟงกชน
การสงอารเรยในกรณน ใชแคชอตวแปรอารเรยเทานน เชน หากใน main มการประกาศอารเรยดงน
int num[10];
และฟงกชน print_arr มตนแบบฟงกชนดงน
void print_arr(int a[10]); การสงอารเรย num ทกอลเมนตไปใหฟงกชน print_arr สามารถเขยนไดดงน
print_arr(num);
ตวอยางท 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
ตวอยางท 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
อารเรยสามารถเกบ 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
studentList[0]
studentList[1]
studentList[2]
Student Student Object
Student Student Object
Student Student Object
อารเรยแบบ 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 มต
การประกาศตวแปรอารเรย 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]
ตวอยางการเขาถงตวแปรอารเรย 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 ตว คอ ตวนบแถวและตวนบหลก
ตวอยางเชน
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
ตวอยางท 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
ตวอยางท 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
การใหคาเรมตน (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}};
5 8
9 0
0 1
0
1
-1 02
ในการกาหนดคาเรมตนของอารเรย 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
ในภาษา Java มกลมคลาสทเรยกวา คอลเลกชน (Collection) ซงออบเจกต
จากคลาสนสามารถใชสะสมออบเจกตตาง ๆ ไวได เชน Class ArrayList ดกวา
Array ทสามารถเพมสมาชกได โดยไมตองประกาศไวลวงหนา
การใช Class ArrayList จะตอง import java.util.ArrayListตวอยางการสรางออบเจกต จาก Class 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; //เรยกใชคลาส 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());//แสดงขนาดของอารเรย
}
}
ตวอยางโปรแกรม
String คอขอความ หรอ สายของอกขระ ในภาษา C++ ไมมตว
แปร ประเภท String แตจะมตวแปรประเภท char ใหใชแทน ซงตวแปร ประเภทchar จะสามารถเกบอกขระได 1 อกขระ เทานนถาหากเราอยากใหตวแปร char สามารถเกบขอความไดเรากสามารถ ทาใหตวแปร char เปน array ได char Name[10];
String
ความหมายวา ตวแปร ชอ 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];
ใชเครองหมาย = =เปนการเปรยบเทยบวา 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 เดยวกน”);
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(“มคาไมเทากน”);
compareTo method
การเปรยบเทยบความไมเทากนของ String โดยจะใหคาทไดจากการเปรยบเทยบแบงเปน 3 คาคอ- เปนลบ (-) ถาคาแรกนอยกวาคาทสอง- เปนบวก (+) ถาคาแรกมากกวาคาทสอง- เปนศนย (0) ถาคาเทากน
รปแบบคาสงString1.compareTo(String2);
ตวอยางการใชงานถากาหนดใหdatastring1 เปน “abc”;datastring2 เปน “abf”;
เขยนคาสงดงนdatastring1.compareTo(datastring2);
ผลลพธทไดจะออกมาเปน -3 หมายถง ตาแหนงท 2 ของ object แรกมคานอย กวาตาแหนงท 2 ของ object ท 2 (c<f)
คลาส StringBuffer จะมลกษณะคลายกบคลาส String เพยงแตเปนตวแปร
สตรงทมการแกไขคาแบบถาวร คอนสตรกเตอรของคลาส StringBuffer ทนาสนใจ
มดงตอไปน
StringBuffer(String s) เกบสตรง s ไวในตวแปร StringBuffer StringBuffer() เกบขอความวางเปลาไวในตวแปร StringBuffer และมขนาด
16 byte เหตทตวแปร StringBuffer มขนาดปกต 16 และจะเพมขนาดเมอเกบ
ขอความลงไป เปนเพราะถามการเปลยนขอความทเกบภายหลง ขอความใหมอาจมขนาดไม
เทาเดม ดงนนจาวาจงวางไวอก 16 ทวางเพอจะไดไมตองกนทในหนวยความจาเพมเตมอก
ในกรณทขอความใหมมขนาดใหญกวาเดมไมเกน 16 เพราะการกนทในหนวยความจา
เพมเตมภายหลงเปนเรองยงยากและอาจทาใหประสทธภาพในการเขาถงลดลง
StringBuffer(int length) เกบขอความวางเปลาไวในตวแปร
StringBuffer และมขนาดเทากบ length
คลาส StringBuffer
เมธอดทนาสนใจสวนหนงของคลาส 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)
เมธอดนเปนโอเวอรโหลดเมธอด ทาหนาทเพมขอความในวงเลบเขาไปตอทายขอความทม
อยแลวใน 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
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()สงคาของขอความออกมาในรปตวแปรสตรง
//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);
}}
ขอทแตกตางระหวาง StringBuffer และ String คอขนาดของ
StringBuffer ไมจาเปนตองเทากบขนาดของขอความและสามารถเพมหรอลด
ขนาดได เราสามารถตรวจสอบขนาดของ StringBuffer ไดโดยใชเมธอด intcapacity() ซงจะคนคาปจจบนของ StringBuffer ดงตวอยางตอไปน
ขอแตกตางระหวาง StringBuffer และ String
//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, 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
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
รายชอสมาชก