More Related Content
Similar to บทที่ 5 ข้อมูลชนิดอาร์เรย์และสตริง (20)
More from Onpreeya Sahnguansak (20)
บทที่ 5 ข้อมูลชนิดอาร์เรย์และสตริง
- 3. ตัว แปรอาร์เ รย์แ บบ 1 มิต ิ
อาร์เรย์หนึ่งมิติ มีโครงสร้างเทียบเท่าเมตริกซ์ขนาด nx1 การ
ประกาศตัวแปรอาร์เรย์ จะใช้เครื่องหมาย [ ] ล้อมค่าตัวเลขจำานวน
เต็ม เพื่อบอกจำานวนหน่วยข้อมูลที่ต้องการได้ในรูป
ชนิด ของตัว แปร ชื่อ ตัว แปร [จำา นวนสมาชิก ที่
ต้อ งการ]
data_type variable_name [ number-ofelements ]
เช่น int a[5];
double x, y[10], z[3];
- 4. ตัว แปรอาร์เ รย์ห ลายตัว
อาร์เรย์หลายมิติ (Multi-dimensional array) คือ อาร์เรย์ที่
มีสมาชิกเป็นข้อมูลอาร์เรย์ นั่นคือ ในหน่วยข้อมูลแต่ละหน่วยของ
อาร์เรย์ จะเป็นอาร์เรย์ย่อยๆ ซึ่งอาจจะกำาหนดซ้อนลงไปได้หลาย
ชั้น
การกำาหนดอาร์เรย์หลายมิติ จะกระทำาในรูปชนิดตัวแปร
ชื่อตัวแปร[จำานวนสมาชิก][จำานวนสมาชิก]….;
การประกาศอาร์เรย์หลายตัวทำาได้ดังนี้
int [] abc , xyz;
abc = new int[500];
xyz = new int[10];
หรือเขียนรวมกันได้ดังนี้
int[] abc = new int[500], xyz = new int[10];
- 5. การกำา หนดค่า เริ่ม ต้น ให้
อาร์เ รย์ 1
สามารถประกาศตัวแปร Array พร้อมกับกำาหนดค่าเริ่มต้น
ให้กบสมาชิก Array ได้โดยมีรูปแบบ
ั
ดังนี
้
ชนิดของตัวแปรอาร์เรย์ ชื่ออาร์เรย์[จำานวนข้อมูล] = {ค่า
คงที่,ค่าคงที่,…};
- 6. การเข้า ถึง ตัว แปรอาร์เ รย์
เมื่อมีการประกาศอาร์เรย์แล้ว ค่าตำาแหน่งหมายเลขลำาดับข้อมูล
สำาหรับใช้เข้าถึงตัวแปรย่อยต่างๆ ในอาร์เรย์ จะถูกกำาหนดโดย
อัตโนมัติ
โดยหากกำาหนดอาร์เรย์ด้วยขนาด n ข้อมูล หน่วยแรก
จะมีค่าตำาแหน่งลำาดับเป็น 0 ไปจนถึงข้อมูลหน่วยสุดท้ายจะมีค่า
ตำาแหน่งลำาดับเป็น n™ ถ้าต้องการอ่านหรือเขียนข้อมูลในหน่วยต่างๆ ของ
ตัวแปรอาร์เรย์ จะต้องอ้างชื่อตัวแปรตามด้วยค่าลำาดับของหน่วย
ในกลุ่มข้อมูลอาร์เรย์ ล้อมด้วยเครื่องหมาย [ ] ซึ่งเรียก
ว่า subscript (หรือดัชนี index)
™ ค่าดัชนี อาจอยู่ในรูป ค่าคงที่ ของตัวแปร นิพจน์ หรือ
ฟังก์ชันที่ให้ค่าเป็นค่าจำา นวนเต็ม ก็ได้ ( positive integer
>=0 )
™ ของเขตของ index หรือ subscript มีค่าตั้งแต่ 0 ถึง n-
- 7. การใช้ค ำา สัง วนรอบ 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]); }
- 8. การส่ง ผ่า นอาร์เ รย์ไ ปยัง
ฟัง ก์ช ัน
สามารถแบ่งได้เป็น 2 ลักษณะ
1.การส่งผ่านค่าอีลเมนต์อาร์เรย์ให้กับฟังก์ชัน เป็นการเรียก
ี
ใช้ฟงก์ชันแบบ Call-by-value
ั
2. การส่งอาร์เรย์ทุกอีลีเมนต์ให้กับฟังก์ชัน เป็นการเรียกใช้
ฟังก์ชันแบบ Call-by-reference
™
- 9. การส่ง ผ่า นอาร์เ รย์ไ ปยัง
ฟัง ก์ช ัน (ต่อ )
การเรีย กใช้แ บบ 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] ยัง เหมือ นเดิม
- 10. การส่ง ผ่า นอาร์เ รย์ไ ปยัง ฟัง ก์ช ัน
(ต่อ )
การเรีย กใช้แ บบ Call-by-reference
ใช้วิธีการส่งค่า แอดเดรส (Address)*** ของตัวแปรไปให้
ฟังก์ชัน
ใช้กับฟังก์ชันที่รับค่าเข้าเป็นอาร์เรย์
™ สามารถแก้ไขค่าของอาร์กิวเมนต์ภายในฟังก์ชัน
ได้ = การแก้ไขค่าตัวแปรอาร์เรย์ ภายในฟังก์ชัน มีผลการ
เปลี่ยนแปลงต่อตัวแปรที่ส่งค่ามา
เพราะ การมีการจัดการค่าของหน่วยความจำาในตำาแหน่งเดียวกัน
™ ***แอดเดรส (Address) คือ ค่าที่ใช้อางถึงตัวข้อมูล
้
ภายในหน่วยความจำา เหมือนกับหมายเลขบ้านเลขที่**
- 11. ฟัง ก์ช ัน ที่ม ก ารรับ ค่า เข้า เป็น
ี
อาร์เ รย์
ฟังก์ชันสามารถที่จะรับค่าเข้าเป็นอาร์เรย์ได้ ซึ่งรูปแบบของการ
เขียนต้นแบบของฟังก์ชันเป็นดังนี้
™ ชนิด ข้อ มูล ชื่อ ฟัง ก์ช ัน (ชนิด ข้อ มูล ชื่อ
ตัว แปร[ขนาดอาร์เ รย์]);
ในกรณีฟงก์ชันมีการรับค่าเข้าเป็นอาร์เรย์ 1 มิติ อาจจะไม่ต้อง
ั
กำาหนดขนาดของอาร์เรย์ก็ได้
™ ตัวอย่างเช่น
™
int sum_arr(int num[10]);
™
void print_arr(int a[5]);
™
float average(int num[]);
- 12. การส่ง ผ่า นค่า อีล ีเ มนต์อ าร์เ รย์
ให้ก บ ฟัง ก์ช ัน
ั
หากฟังก์ชัน my_func มีต้นแบบของฟังก์ชันดังนี้
void my_func(int x);
และใน main ได้มีการประกาศตัวแปรอาร์เรย์ชื่อว่า num
int num[10];
™ การส่งอีลีเมนต์ที่ 0 ของอาร์เรย์ num ไปเป็น
อาร์กิวเมนต์ของฟังก์ชัน my_func สามารถเขียนได้ดังนี้
™
my_func(num[0]);
- 13. การส่ง อาร์เ รย์ท ุก อีล ีเ มนต์ข อง
อาร์เ รย์ใ ห้ก ับ ฟัง ก์ช ัน
การส่งอาร์เรย์ในกรณีนี้ ใช้แค่ชื่อตัวแปรอาร์เรย์เท่านั้น เช่น
หากใน main มีการประกาศอาร์เรย์ดังนี้
int num[10];
และฟังก์ชัน print_arr มีต้นแบบฟังก์ชันดังนี้
void print_arr(int a[10]);
™การส่งอาร์เรย์ num ทุกอีลีเมนต์ไปให้
ฟังก์ชัน print_arr สามารถเขียนได้ดังนี้
print_arr(num);
- 14.
อาร์เ รย์ข องออบเจ็ก ต์
อาร์เรย์สามารถเก็บ 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();
™
- 15.
อาร์เ รย์แ บบ 2 มิต ิ
โดยสรุป สำาหรับอาร์เรย์สองมิติ เมื่ออ้างชื่ออาร์เรย์ จะหมายถึง
ตำาแหน่งเริ่มต้นของอาร์เรย์ทั้งหมด (อาร์เรย์ 2 มิติ)
เมื่ออ้างชื่ออาร์เรย์พร้อมสมาชิกหนึ่งอันดับ จะหมายถึง
ตำาแหน่งเริ่มต้นของอาร์เรย์ย่อยภายใน (อาร์เรย์ 1 มิติ)
เมื่ออ้างชื่ออาร์เรย์พร้อมค่าสองอันดับ จะหมายถึง ข้อมูล
ภายในอาร์เรย์
™ การประกาศตัว แปรอาร์เ รย์ 2 มิต ิ
™ int val[3][4];
™ double prices[10][5];
™ char code[6][4];
- 16. การใช้ค ำา สั่ง 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;
- 17. ™ การให้ค า เริ่ม ต้น (Array
่
Initialization)
เราจะใช้กลุมค่าคงที่ที่มีสมาชิกเป็นกลุ่มค่าคงที่ย่อย ซึ่ง
่
เป็นชนิดเดียว กันและมีขนาดเท่ากัน รวมถึงสอดคล้องกับชนิด
ของอาร์เรย์ด้วย
โดยใช้เครื่องหมาย {} หรือ , ในการแบ่งแยกแต่ละแถว
- 18. Class ArrayList
ในภาษา Java มีกลุ่มคลาสที่เรียกว่า คอลเล็กชั่น
(Collection) ซึ่งออบเจ็กต์จากคลาสนี้สามารถใช้สะสมออบเจ็กต์
ต่าง ๆ ไว้ได้ เช่น Class ArrayList ดีกว่า Array ทีสามารถเพิ่ม
่
สมาชิกได้ โดยไม่ต้องประกาศไว้ล่วงหน้า
การใช้ Class ArrayList จะต้อง import java.util.ArrayList
- 19. Method ที่ส ำา คัญ ของ ArrayList
-add(int index,Object obj) ใช้ใส่ออบเจ็กต์ลงใน
อาร์เรย์ที่ตำาแหน่ง index
-remove(int index) นำาออบเจ็กต์ตำาแหน่ง index ออก
จากอาร์เรย์
™
-get(int index) คืนค่าออบเจ็กต์ใน
ตำาแหน่ง index
™
-indexof(Object obj) คืนค่า index ของออบ
เจ็กต์ที่ระบุ
™
-size สำาหรับหาขนาดของ ArrayList
- 20. String
String คือข้อความ หรือ สายของอักขระ ในภาษา C+
+ ไม่มีตัวแปร ประเภท String แต่จะมีตัวแปรประเภท char ให้ใช้
แทน ซึ่งตัวแปร ประเภทchar จะสามารถเก็บอักขระได้ 1 อักขระ
เท่านั้นถ้าหากเราอยากให้ตัวแปร char สามารถเก็บข้อความได้
เราก็สามารถ ทำาให้ตัวแปร char เป็น array ได้ char Name[10];
- 21. การเปรีย บเทีย บ String
ใช้เครื่องหมาย ==
เป็นการเปรียบเทียบว่า String 2 ตัวเป็น Object เดียวกันหรือไม่
โดยจะเปรียบเทียบค่าอ้างอิงหรือที่อยู่ในหน่วยความจำาของตัวแปร
ทั้งสอง ไม่ได้เป็นการเปรียบเทียบถึงข้อมูลที่ String ทั้ง 2 ตัวว่า
เก็บข้อมูลเดียวกันหรือไม่
รูป แบบคำา สั่ง
String1 == String2;
equals() method
เป็นการเปรียบเทียบค่าใน String Object ทั้ง 2 ตัวเป็นค่า
เดียวกันหรือไม่ โดยที่จะให้ค่าเป็นจริง (True) ก็ต่อเมื่อตัวอักษร
ทุกตัวใน String ทั้ง 2 ค่าจะต้องเหมือนกันหมด โดยสนใจตัว
อักษรพิมพ์เล็กและพิมพ์ใหญ่ด้วย หากต่างกันก็จะ
ให้ค่าเป็นเท็จ (False)
- 22. การเปรีย บเทีย บ String (ต่อ )
รูป แบบคำา สั่ง
String1.equals(String2);
หากไม่สนว่าตัวอักษรที่อยู่ภายใน String จะเป็นตัวเล็กหรือ
ตัวใหญ่ ถ้าต้องการตรวจสอบเพียงการเหมือนทางรูปร่างก็ใช้
method equalsIgnoreCase()
compareTo method
การเปรียบเทียบความไม่เท่ากันของ String โดยจะให้ค่าที่ได้
จากการเปรียบเทียบแบ่งเป็น 3 ค่าคือ
- เป็นลบ (-) ถ้าค่าแรกน้อยกว่าค่าที่สอง
- เป็นบวก (+) ถ้าค่าแรกมากกว่าค่าที่สอง
- เป็นศูนย์ (0) ถ้าค่าเท่ากัน
- 23. การเปรีย บเทีย บ String (ต่อ )
รูป แบบคำา สัง
่
String1.compareTo(String2);
คลาส StringBuffer
™ คลาส StringBuffer จะมีลักษณะคล้ายกับคลาส String เพียงแต่
เป็นตัวแปรสตริงที่มีการแก้ไขค่าแบบถาวร คอนสตรักเตอร์ของ
คลาส StringBuffer ที่น่าสนใจมีดังต่อไปนี้
StringBuffer(String s) เก็บสตริง s ไว้ในตัวแปร StringBuffer
StringBuffer() เก็บข้อความว่างเปล่าไว้ในตัวแปร StringBuffer และมี
ขนาด 16 byte เหตุที่ตัวแปร StringBuffer มีขนาดปกติ 16 และจะเพิ่ม
ขนาดเมื่อเก็บข้อความลงไป เป็นเพราะถ้ามีการเปลี่ยนข้อความที่เก็บภาย
หลัง ข้อความใหม่อาจมีขนาดไม่เท่าเดิม ดังนั้นจาวาจึงว่างไว้อีก 16 ที่ว่าง
เพื่อจะได้ไม่ต้องกันที่ในหน่วยความจำาเพิ่มเติมอีก ในกรณีที่ขอความใหม่มี
้
ขนาดใหญ่กว่าเดิมไม่เกิน 16 เพราะการกันที่ในหน่วยความจำาเพิ่มเติมภาย
หลังเป็นเรื่องยุ่งยากและอาจทำาให้ประสิทธิภาพในการเข้าถึงลดลง
StringBuffer(int length) เก็บข้อความว่างเปล่าไว้ใน
ตัวแปร StringBuffer และมีขนาดเท่ากับ length
- 24. เมธอดที่น ่า สนใจส่ว นหนึ่ง ของ
คลาส 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)
- 25. เมธอดที่น ่า สนใจส่ว นหนึ่ง ของ
คลาส StringBuffer (ต่อ )
เมธอดนี้เป็นโอเวอร์โหลดเมธอด ทำาหน้าที่เพิ่มข้อความในวงเล็บเข้าไป
ต่อท้ายข้อความที่มีอยู่แล้วใน 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)
- 26. เมธอดที่น า สนใจส่ว นหนึง ของ
่
่
คลาส StringBuffer (ต่อ )
เมธอดนี้เป็นโอเวอร์โหลดเมธอด ทำาหน้าที่แทรกข้อความ
ในวงเล็บเข้าไปในตำาแหน่งที่เท่ากับ 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()ส่งค่าของข้อความออก
มาในรูปตัวแปรสตริง
- 27. ข้อ แตกต่า ง
ระหว่า ง StringBuffer และ String
ข้อที่แตกต่างระหว่าง StringBuffer และ String คือขนาด
ของ StringBuffer ไม่จำาเป็นต้องเท่ากับขนาดของข้อความและสามารถ
เพิ่มหรือลดขนาดได้ เราสามารถตรวจสอบขนาดของ StringBuffer ได้
โดยใช้เมธอด int capacity()ซึ่งจะคืนค่าปัจจุบันของ StringBuffer ดัง
ตัวอย่างต่อไปนี้
™
จากโค้ดข้างบนในบรรทัดที่ (1) เราสร้างตัวแปร s1 โดย
ไม่เก็บค่าอะไรเลย ผลที่ได้คอขนาดของข้อความเท่ากับ 0 แต่ขนาดของตัว
ื
มันเองจริงเป็น 16 ซึ่งเป็นค่าปกติ ในบรรทัดที่ (2) เราสร้างตัวแปร s2 โดย
ให้เก็บค่า Hello ผลที่ได้คอขนาดข้อความเป็น 5 แต่ขนาดของตัวมันเอง
ื
เท่ากับค่าปกติบวกด้วยความยาวของข้อความที่สงให้มันเก็บซึ่ง
ั่
เท่ากับ 21 นั่นเอง ในบรรทัดที่ (3) เราพยายามสร้างตัวแปร s3 ซึ่งเป็นวิธี
การที่ใช้ไม่ได้กับตัวแปร StringBuffer
™
เหตุที่ตัวแปร StringBuffer มีขนาดเท่ากับ 16 และจะเพิ่ม
ขนาดเมื่อเก็บข้อความลงไป เป็นเพราะถ้ามีการเปลี่ยนแปลงข้อความที่เก็บ
ภายหลัง ข้อความหใม่อาจมีขนาดไม่เท่าเดิม จาวาจึงเผื่อที่ว่างไว้อีก 16 ที่
ว่าง เพื่อจะได้ไม่ต้องกันพื้นที่ในหน่วยความจำาเพิ่มเติมอีกในกรณีที่
ข้อความใหม่มีขนาดใหญ่กว่าเดิมไม่เกิน 16 เพราะการกันที่ในหน่วยความ
จำาเพิ่มเติมภายหลังทำาได้ยาก เนืองจากพื้นที่ในหน่วยความจำาทีเพิ่มขึนอาจ
่
้
ไม่อยู่ติดกับพื้นที่เดิมทำาให้ประสิทธิภาพในการเข้าถึงลดลง
- 28. ผู้จัดทำา
ที่ 23
ที่ 27
ที่ 30
ทื่ 32
1.นางสาวอรปรียา
สงวนศักดิ์ เลข
2.นางสาวมานิดา ครุธนาค
เลขที่ 26
3.นางสาววาสินี
ลัดดากุล
เลข
4.นางสาวปัทมา
พรหมชนะ เลข
5.นางสาวอรฤทัย อินทนิล
6.นางสาวมนัชญา
วสุอนันต์กุล
เลข