CS313: Object-Oriented Programming
บทที่ 6: Arrays
บทที่ 6 Arrays 6.1 การประกาศตัวแปรชุด (Arrays) รูปแบบ type[ ] variableName; type variableName[ ];
ยังไมมีการจองเนื้อที่
type[ ] variableName = new type[length]; type variableName[ ] = new type[length]; ตัวอยาง แบบที่ 1
มีการจองเนื้อที่
int c[ ]; c = new int [12];
// การประกาศ array // การจองเนื้อที่ array
แบบที่ 2
int c[ ] = new int [12];
// รวม 2 คําสั่งในแบบที่ 1 ใหอยูภายในคําสั่งเดียว
แบบที่ 3
String b[ ] = new String[100], x[ ] = new String[27]; // การประกาศตัวแปรชุด 2 ชุดใน คําสั่งเดียว subscript ของตัวแปรชุด จะเริ่มจาก 0 ซึ่งเหมือนกับภาษา C
เมือ่ มีการสรางตัวแปรชุด จะมีการกําหนดคาเริ่มตนตามประเภทของขอมูล เชน ขอมูลประเภท int, double, long จะมีคาเริ่มตนเทากับ 0 ขอมูลประเภท boolean จะมีคาเริ่มตนเทากับ false ขอมูลที่เปน object จะมีคาเริ่มตนเทากับ null ตัวอยางที่ 1 public class InitArray { public static void main (String args[]) { int n[]; // declare reference to an array n = new int[10]; // dynamically allocate array System.out.println(“Subscript\tValue”); for (int j = 0; j
2/2545
1
CS313: Object-Oriented Programming
บทที่ 6: Arrays
การกําหนดคาเริ่มตนใหกับตัวแปรชุดเอง มีรูปแบบดังตัวอยางตอไปนี้ ตัวอยางรูปแบบ int data[ ] = {10, 20, 30, 40, 50 }; Sring month_name[ ] = {“January”, “February”, “March”, “April”}; จํานวนสมาชิกในตัวแปรชุดที่ถูกกําหนดคาเริ่มตนโดยผูเขียนโปรแกรม จะเทากับจํานวนคาเริ่มตนที่ กําหนด เชนจากตัวอยางการประกาศตัวแปรชุดชื่อ data จะมีสมาชิกทั้งหมด 5 ตัว โดย subscript จะเริ่มจาก 0, 1, 2, 3 และ 4 กลาวคือ data[0] เทากับ 10 data[1] เทากับ 20 เปนตน สวนตัวอยางของการประกาศตัว แปรชุดชื่อ month_name จะมีสมาชิกทั้งหมด 4 ตัว โดยที่ month_name[0] มีคา January และ month_name [1] มีคา February ในกรณีทตี่ อ งการหาจํานวนสมาชิก หรือขนาดของตัวแปรชุด ทําไดโดยการเรียกใช method ชื่อ length เชน data.length จะ return คา 5 สวน month_name.length จะ return คา 4 มาให ตัวอยางที่ 2 public class InitArray { public static void main (String args[]) { // initialiser list specifies number of elements and value for each element. int n[] = {32, 27, 64, 18, 95, 14, 90, 70, 60, 37}; System.out.println(“Subscript\tValue”); for (int j = 0; j
ตัวอยางที่ 3 class Histogram ถูกสรางขึ้นมาเพื่อพิมพ '*' เทากับจํานวนตัวเลขที่สมาชิกแตละตัวของตัวแปรชุด n เก็บไว public class Histogram { public static void main (String args[]) { int n[] = {19, 3, 15, 7, 11, 9, 13, 5, 17, 1}; System.out.println(“Element\tValue\tHistogram”); for (int j = 0; j
2/2545
2
CS313: Object-Oriented Programming
บทที่ 6: Arrays
ตัวอยางที่ 4 เปนตัวอยางการใช method random() ของ class Math ในการจําลองการทอยลูกเตาจํานวน 6000 ครั้ง และเก็บสถิติของแตมที่ไดจากการทอยลูกเตาแตละครั้ง public class RollDie { public static void main (String args[]) { int face, frequency[] = new int[7]; for ( int roll = 1; roll <=6000; roll++) { face = 1 + (int) (Math.random() * 6); ++frequency[face]; } System.out.println(“Face\tFrequency”); for (face= 0; face
6.2 การสงและรับคาตัวแปรชุดใหกับ method การสงและรับคาตัวแปรชุด ทําไดโดยการอางอิงชื่อตัวแปรชุด ไมตองระบุ subscript แตหากตองการ สงผานคาเฉพาะสมาชิกบางตัว ตองระบุ subscript ของสมาชิกตัวนั้นๆ ที่ตองการ ตัวอยางที่ 5 public class PassArray { public static void main (String args[]) { int a[] = {1, 2, 3, 4, 5}; System.out.println(“Effects of passing entire “ + “array call-by-reference:\n\n” + “The values of the original array are: "); for (int j=0; j
2/2545
3
CS313: Object-Oriented Programming
บทที่ 6: Arrays
ตัวอยางที่ 5 (ตอ) System.out.println(“a[3] after modifyElement: “ + a[3]); } // end method main public static void modifyArray (int b[]) { for (int j=0; j
สังเกต output ของตัวอยางที่ 5 จะพบขอแตกตางระหวางการสงผาน array ไปทั้งชุด ซึ่งเสมือนเปน การสงผานตัวแปรแบบ pass-by-reference และการสงผานเพียงคาของสมาชิกบางตัว ซึง่ จะมีผลเชนเดียวกับ การสงผานตัวแปรแบบ pass-by-value 6.3 การประกาศและใชงานตัวแปรชุดหลายมิติ ตัวอยางการอางอิงตําแหนงสมาชิกตางๆ ของตัวแปรชุดชื่อ A ซึง่ มีขนาด 3 แถว 4 คอลัมน Row 0 Row 1 Row 2
Column 0 A[0][0] A[1][0] A[2][0]
Column 1 A[0][1] A[1][1] A[2][1]
Column 2 A[0][2] A[1][2] A[2][2]
Column 3 A[0][3] A[1][3] A[2][3]
การประกาศและกําหนดคาเริ่มตนของตัวแปรชุดหลายมิติ ทําไดเหมือนกับตัวแปรชุดมิติเดียว ดังตัว อยางตอไปนี้ int b[ ] [ ] = { {1, 2}, {3, 4} }; จากตัวอยางนี้ b เปนตัวแปรชุด 2 มิติ ขนาด 2x2 โดยการอางอิงและคาที่กําหนดใหกับสมาชิกแตละ ตัว มีดังนี้ b[0][0] = 1 b[0][1] = 2 b[1][0] = 3 b[1][1] = 4 ในภาษา Java การประกาศตัวแปรชุด จะมีการจัดการแบบ object การเรียกหรือประมวลผลตัวแปร จะใชแบบอางอิง ดังนั้นตัวแปรชุดหลายมิติในภาษา Java ไมจาเป ํ นตองมีขนาดเทากัน ดังตัวอยางตอไปนี้
2/2545
4
CS313: Object-Oriented Programming
บทที่ 6: Arrays
int b[ ] [ ] = { {1, 2}, {3, 4, 5} }; เปนการประกาศตัวแปรชุดชื่อ b ซึง่ มี 2 แถว แถวที่ 0 ประกอบดวยสมาชิก 2 ตัวคือ 1 และ 2 สวน แถวที่ 1 มีสมาชิก 3 ตัว คือ 3, 4 และ 5 ในการประกาศตัวแปรชุดที่ไมมีการกําหนดคาเริ่มตนให หากเปนตัวแปรที่มีจํานวนคอลัมนเทากันใน ทุกแถว ทําไดดังตัวอยางนี้ int b[ ] [ ]; b = new int [3] [3]; เปนการประกาศตัวแปรชุดชื่อ b ซึง่ มี 3 แถว และ 3 คอลัมนในทุกแถว ในกรณีทจี่ านวนคอลั ํ มนในแตละแถวไมเทากัน สามารถประกาศได ดังตัวอยางตอไปนี้ int b[ ] [ ]; b = new int [2] [ ]; // allocate rows b[0] = new int [5]; // allocate columns for row 0 b[1] = new int [3]; // allocate columns for row 1 ตัวอยางที่ 6 public class InitArray { public static void main (String args[]) { int array1[][] = { {1, 2, 3}, {4, 5, 6} }; int array2[][] = { {1, 2}, {3}, {4, 5, 6} }; System.out.println(“Values in array1 by row are”); buildOutput(array1); System.out.println(“Values in array2 by row are”); buildOutput(array2); } // end main public static void buildOutput( int a[][] ) { for (int j=0; j
2/2545
5