บทที่ 5 ข้อมูลชนิด
อาร์เรย์และสตริง
ชั้น มัธยมศึกษาปีที่ 6/1
อาร์เ รย์ (Array)
อาร์เรย์ (Array) เป็นตัวแปรชุดให้สำาหรับเก็บข้อมูลที่มีความ
สัมพันธ์กัน  โดยจะเก็บไว้ในชื่อเดียวกัน 
สมาชิกแต่ละตัวของ Array จะเรียกว่า Element หรือ Cell ตัวเลข
ที่ใช้ระบุตำาแหน่งสมาชิกของ Array เรียก
ว่า Index หรือ Subscript
 
ตัว อย่า ง Array  X ทีมี 5 Element
่
ซึ่งจะเริ่มต้นตั้งแต่ Index 0 ถึง 4
ตัว แปรอาร์เ รย์แ บบ 1 มิต ิ
อาร์เรย์หนึ่งมิติ มีโครงสร้างเทียบเท่าเมตริกซ์ขนาด nx1 การ
ประกาศตัวแปรอาร์เรย์ จะใช้เครื่องหมาย [ ] ล้อมค่าตัวเลขจำานวน
เต็ม เพื่อบอกจำานวนหน่วยข้อมูลที่ต้องการได้ในรูป
                   ชนิด ของตัว แปร ชื่อ ตัว แปร [จำา นวนสมาชิก ที่
ต้อ งการ]
data_type variable_name [ number-ofelements ]         
 เช่น         int           a[5];
                               double    x,  y[10],  z[3];
ตัว แปรอาร์เ รย์ห ลายตัว
อาร์เรย์หลายมิติ (Multi-dimensional array) คือ อาร์เรย์ที่
มีสมาชิกเป็นข้อมูลอาร์เรย์ นั่นคือ ในหน่วยข้อมูลแต่ละหน่วยของ
อาร์เรย์ จะเป็นอาร์เรย์ย่อยๆ ซึ่งอาจจะกำาหนดซ้อนลงไปได้หลาย
ชั้น
        การกำาหนดอาร์เรย์หลายมิติ จะกระทำาในรูปชนิดตัวแปร  
ชื่อตัวแปร[จำานวนสมาชิก][จำานวนสมาชิก]….;
การประกาศอาร์เรย์หลายตัวทำาได้ดังนี้
                int [] abc , xyz;
                abc = new int[500];
                xyz = new int[10];
หรือเขียนรวมกันได้ดังนี้
                int[] abc = new int[500], xyz = new int[10];
การกำา หนดค่า เริ่ม ต้น ให้
อาร์เ รย์ 1
สามารถประกาศตัวแปร Array พร้อมกับกำาหนดค่าเริ่มต้น
ให้กบสมาชิก Array ได้โดยมีรูปแบบ
ั
ดังนี                                                                                     
้
                                           
ชนิดของตัวแปรอาร์เรย์ ชื่ออาร์เรย์[จำานวนข้อมูล] = {ค่า
คงที่,ค่าคงที่,…};
การเข้า ถึง ตัว แปรอาร์เ รย์
  เมื่อมีการประกาศอาร์เรย์แล้ว ค่าตำาแหน่งหมายเลขลำาดับข้อมูล

  

สำาหรับใช้เข้าถึงตัวแปรย่อยต่างๆ ในอาร์เรย์ จะถูกกำาหนดโดย
อัตโนมัติ
           โดยหากกำาหนดอาร์เรย์ด้วยขนาด  n ข้อมูล หน่วยแรก
จะมีค่าตำาแหน่งลำาดับเป็น 0 ไปจนถึงข้อมูลหน่วยสุดท้ายจะมีค่า
ตำาแหน่งลำาดับเป็น n™             ถ้าต้องการอ่านหรือเขียนข้อมูลในหน่วยต่างๆ ของ
ตัวแปรอาร์เรย์ จะต้องอ้างชื่อตัวแปรตามด้วยค่าลำาดับของหน่วย
ในกลุ่มข้อมูลอาร์เรย์ ล้อมด้วยเครื่องหมาย [ ] ซึ่งเรียก
ว่า subscript (หรือดัชนี index)
™             ค่าดัชนี อาจอยู่ในรูป ค่าคงที่ ของตัวแปร นิพจน์ หรือ
ฟังก์ชันที่ให้ค่าเป็นค่าจำา นวนเต็ม ก็ได้  ( positive integer 
>=0 )
™             ของเขตของ index หรือ subscript มีค่าตั้งแต่ 0 ถึง 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]);  }
การส่ง ผ่า นอาร์เ รย์ไ ปยัง
ฟัง ก์ช ัน
สามารถแบ่งได้เป็น 2 ลักษณะ
         1.การส่งผ่านค่าอีลเมนต์อาร์เรย์ให้กับฟังก์ชัน เป็นการเรียก
ี
ใช้ฟงก์ชันแบบ Call-by-value
ั
   2. การส่งอาร์เรย์ทุกอีลีเมนต์ให้กับฟังก์ชัน เป็นการเรียกใช้
ฟังก์ชันแบบ 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] ยัง เหมือ นเดิม
การส่ง ผ่า นอาร์เ รย์ไ ปยัง ฟัง ก์ช ัน
(ต่อ )
   

  การเรีย กใช้แ บบ  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]);
การส่ง อาร์เ รย์ท ุก อีล ีเ มนต์ข อง
อาร์เ รย์ใ ห้ก ับ ฟัง ก์ช ัน
      

  การส่งอาร์เรย์ในกรณีนี้ ใช้แค่ชื่อตัวแปรอาร์เรย์เท่านั้น เช่น
หากใน main มีการประกาศอาร์เรย์ดังนี้
         
int num[10];
  และฟังก์ชัน print_arr มีต้นแบบฟังก์ชันดังนี้
    
void print_arr(int a[10]);
™การส่งอาร์เรย์ num ทุกอีลีเมนต์ไปให้
ฟังก์ชัน print_arr สามารถเขียนได้ดังนี้
           
print_arr(num);
 

อาร์เ รย์ข องออบเจ็ก ต์
  อาร์เรย์สามารถเก็บ 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();
™            
       

อาร์เ รย์แ บบ 2 มิต ิ

โดยสรุป สำาหรับอาร์เรย์สองมิติ เมื่ออ้างชื่ออาร์เรย์ จะหมายถึง
ตำาแหน่งเริ่มต้นของอาร์เรย์ทั้งหมด (อาร์เรย์ 2 มิติ)
          เมื่ออ้างชื่ออาร์เรย์พร้อมสมาชิกหนึ่งอันดับ จะหมายถึง
ตำาแหน่งเริ่มต้นของอาร์เรย์ย่อยภายใน  (อาร์เรย์ 1 มิติ)
             เมื่ออ้างชื่ออาร์เรย์พร้อมค่าสองอันดับ จะหมายถึง ข้อมูล
ภายในอาร์เรย์ 
™             การประกาศตัว แปรอาร์เ รย์ 2 มิต ิ
™             int val[3][4];
™             double prices[10][5];
™             char code[6][4];
การใช้ค ำา สั่ง  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;
™ การให้ค า เริ่ม ต้น (Array
่
Initialization)
    

 เราจะใช้กลุมค่าคงที่ที่มีสมาชิกเป็นกลุ่มค่าคงที่ย่อย ซึ่ง
่
เป็นชนิดเดียว กันและมีขนาดเท่ากัน รวมถึงสอดคล้องกับชนิด
ของอาร์เรย์ด้วย
 
โดยใช้เครื่องหมาย {} หรือ  , ในการแบ่งแยกแต่ละแถว
  
Class ArrayList
ในภาษา Java มีกลุ่มคลาสที่เรียกว่า คอลเล็กชั่น
(Collection) ซึ่งออบเจ็กต์จากคลาสนี้สามารถใช้สะสมออบเจ็กต์
ต่าง ๆ ไว้ได้  เช่น Class ArrayList ดีกว่า Array ทีสามารถเพิ่ม
่
สมาชิกได้ โดยไม่ต้องประกาศไว้ล่วงหน้า  
การใช้ Class ArrayList จะต้อง import java.util.ArrayList
Method ที่ส ำา คัญ ของ  ArrayList
-add(int index,Object obj) ใช้ใส่ออบเจ็กต์ลงใน
อาร์เรย์ที่ตำาแหน่ง index
   
  -remove(int index) นำาออบเจ็กต์ตำาแหน่ง index ออก
จากอาร์เรย์
™           
  -get(int index) คืนค่าออบเจ็กต์ใน
ตำาแหน่ง index
™         
  -indexof(Object obj) คืนค่า index ของออบ
เจ็กต์ที่ระบุ
™         
  -size สำาหรับหาขนาดของ ArrayList
   
String
String คือข้อความ หรือ สายของอักขระ ในภาษา C+
+ ไม่มีตัวแปร ประเภท String แต่จะมีตัวแปรประเภท char ให้ใช้
แทน ซึ่งตัวแปร ประเภทchar จะสามารถเก็บอักขระได้ 1 อักขระ
เท่านั้นถ้าหากเราอยากให้ตัวแปร char สามารถเก็บข้อความได้
เราก็สามารถ ทำาให้ตัวแปร char เป็น array ได้ char Name[10];
การเปรีย บเทีย บ  String
ใช้เครื่องหมาย ==
เป็นการเปรียบเทียบว่า String 2 ตัวเป็น Object เดียวกันหรือไม่
โดยจะเปรียบเทียบค่าอ้างอิงหรือที่อยู่ในหน่วยความจำาของตัวแปร
ทั้งสอง ไม่ได้เป็นการเปรียบเทียบถึงข้อมูลที่ String ทั้ง 2 ตัวว่า
เก็บข้อมูลเดียวกันหรือไม่
รูป แบบคำา สั่ง
      String1 == String2;
equals() method
เป็นการเปรียบเทียบค่าใน String Object ทั้ง 2 ตัวเป็นค่า
เดียวกันหรือไม่ โดยที่จะให้ค่าเป็นจริง (True) ก็ต่อเมื่อตัวอักษร
ทุกตัวใน String ทั้ง 2 ค่าจะต้องเหมือนกันหมด โดยสนใจตัว
อักษรพิมพ์เล็กและพิมพ์ใหญ่ด้วย หากต่างกันก็จะ
ให้ค่าเป็นเท็จ (False)
การเปรีย บเทีย บ  String (ต่อ )
รูป แบบคำา สั่ง
String1.equals(String2);
หากไม่สนว่าตัวอักษรที่อยู่ภายใน String จะเป็นตัวเล็กหรือ
ตัวใหญ่ ถ้าต้องการตรวจสอบเพียงการเหมือนทางรูปร่างก็ใช้
method equalsIgnoreCase()
compareTo method
การเปรียบเทียบความไม่เท่ากันของ String โดยจะให้ค่าที่ได้
จากการเปรียบเทียบแบ่งเป็น 3 ค่าคือ
- เป็นลบ (-) ถ้าค่าแรกน้อยกว่าค่าที่สอง
- เป็นบวก (+) ถ้าค่าแรกมากกว่าค่าที่สอง
- เป็นศูนย์ (0) ถ้าค่าเท่ากัน
การเปรีย บเทีย บ  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
เมธอดที่น ่า สนใจส่ว นหนึ่ง ของ
คลาส  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 ผ่านเมธอดข้อความจะถูกเปลียนแบบ
่
ถาวร

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)

เมธอดที่น า สนใจส่ว นหนึง ของ
่
่
คลาส  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()ส่งค่าของข้อความออก
มาในรูปตัวแปรสตริง
ข้อ แตกต่า ง
ระหว่า ง  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 เพราะการกันที่ในหน่วยความ
จำาเพิ่มเติมภายหลังทำาได้ยาก เนืองจากพื้นที่ในหน่วยความจำาทีเพิ่มขึนอาจ
่
้
ไม่อยู่ติดกับพื้นที่เดิมทำาให้ประสิทธิภาพในการเข้าถึงลดลง          
ผู้จัดทำา
ที่ 23

ที่ 27
ที่ 30
ทื่ 32

1.นางสาวอรปรียา

สงวนศักดิ์ เลข

2.นางสาวมานิดา ครุธนาค
เลขที่ 26
3.นางสาววาสินี
ลัดดากุล
เลข
4.นางสาวปัทมา

พรหมชนะ เลข

5.นางสาวอรฤทัย อินทนิล
6.นางสาวมนัชญา

วสุอนันต์กุล

เลข

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

  • 1.
  • 2.
  • 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.นางสาวมนัชญา วสุอนันต์กุล เลข