Array
พิจารณา Data Types ปกติดังนี้ ความต้องการ-ใช้ Array เมื่อใด(ฟังอธิบายประกอบ) พิจารณา Data Types ปกติดังนี้ โดยปกติการประกาศตัวแปรพื้นฐาน(primitive data types) นั้นเราจะสามารถจะเก็บค่าของตัวแปรดังกล่าวได้เพียงหนึ่งค่าเท่านั้น ณ ช่วงเวลาใดเวลาหนึ่ง เช่น int x1,x2,x3; x1 = 10; x2= 5; x3 = 6;
สมมุติเราเขียนโปรแกรมเพื่อรับตัวเลข 5 ตัว จากนั้นหาผลรวมของตัวเลข 5 ตัวแล้วแสดงยอดรวมและแสดงค่าของตัวแปรออกมาโดยเริ่มจากตัวสุดท้าย ถึงตัวแรก import javax.swing.JOptionPane; class DataTypeProblem { public static void main (String args[ ] ) { int num1,num2,num3,num4,num5,sum; String str; str = JOptionPane.showInputDialog("enter Number 1: "); num1 = Integer.parseInt(str); str = JOptionPane.showInputDialog("enter Number 2: "); num2 = Integer.parseInt(str); str = JOptionPane.showInputDialog("enter Number 3: "); num3 = Integer.parseInt(str); str = JOptionPane.showInputDialog("enter Number 4: "); num4 = Integer.parseInt(str); str = JOptionPane.showInputDialog("enter Number 5: "); num5 = Integer.parseInt(str); sum = num1+num2+num3+num4+num5; System.out.println("The Sum of Number " + sum); System.out.println("Number 1 "+num1+"Number 2 "+num2+"Number 3 "+num3+"Number 4 "+num4+"Number 5 "+num5); System.exit(0); }}
จากโปรแกรม DataTypeProblem ปัญหาคือ สมมุติว่าถ้าต้องการรับค่าเข้ามา 100 ครั้งและต้องการเก็บค่าเหล่านั้นไว้ใช้งาน ไม่ใช่ 5 ค่า ต้องประกาศตัวแปรถึง 100 ตัวค่าต่างๆ จึงสามารถแยกเก็บและนำมาใช้ได้และยังต้องเขียนโปรแกรมในการรับข้อมูล 100 ครั้ง ลงตัวแปรทั้งหมด ข้อสังเกตุ ตัวแปรทั้ง 5 ตัวจำเป็นต้องประกาศเนื่องจากเราต้องการจะแสดงผลของทั้ง 5 ตัว ทุกตัวแปรจะมีชื่อตัวแปรเหมือนกันต่างกันที่ตัวอักษรตัวสุดท้าย ทุกตัวแปรจะเป็นประเภทเดียวกันคือ int
จากปัญหาดังกล่าวแก้ไขได้ด้วยการใช้ตัวแปรแบบ Array Why Do We Need Arrays? (don’t Used arrays): (Used arrays): int num1; int num2; int num3; int num4; int num5; int num[] = new int[5];
What is an Array ? array คือ โครงสร้างข้อมูลที่นำตัวแปรมาวางเรียงต่อกันในหน่วยความจำ และเรียกตัวแปรแต่ละตัวว่า สมาชิกของ array (elements) ซึ่งมีการกำหนดขนาดที่แน่นอนของจำนวนสมาชิก สมาชิกทุกตัวจะเป็นประเภทเดียวกัน การเข้าถึงข้อมูลสามารถอ้างอิงโดยใช้ ดัชนี(index) ซึ่งเป็นตัวเลขจำนวนเต็มเท่านั้น 1.39 1.69 1.74 0.0 c is array’s name c[0] c[1] c[2] c[3]
หรืออาจกล่าวได้ Array เป็นกลุ่มของตัวแปร โดยที่สมาชิกแต่ละตัวของกลุ่มมีชนิดข้อมูลแบบเดียวกันทุกตัว อะเรย์ในจาวาถือว่าเป็น Object ที่ทำหน้าที่เป็นตัวอ้างอิงไปยังสมาชิก (reference type)
ภาพจินตนาการเรื่องเกี่ยวกับ Array ที่มนุษย์มองเห็น ภาพจินตนาการเรื่องเกี่ยวกับ Array ใน Memory ของเครื่องคอมพิวเตอร์ 50 40 10 20 30 One-Dimension 50 40 10 20 30 1 2 3 4 One-Dimension
ชนิดของ ARRAY Arrays One-Dimensional Arrays Two Dimension ArraysTree-Dimensional
One-Dimensional Arrays 1. dataType[ ] arrayName; arrayName = new dataType[intExp] 2. dataType[ ] arrayName = new dataType[intExp] 3. dataType[ ] arrayName1, arrayName2; หรือ ใช้รูปแบบอย่างง่ายดังนี้ ชนิดข้อมูล ชื่อตัวแปรอาร์เรย์[ ] = new ชนิดข้อมูล [ขนาดอาร์เรย์]; เช่น int num [ ] = new int[5];
การเข้าถึงข้อมูลใน array: arrayName[indexExp]
การประกาศและสร้าง array Array จะถูกสร้างโดยอัตโนมัติในหน่วยความจำโดยใช้ key word คือ new เช่น int c[] = new int[ 5 ]; หรือ int c[]; // declare array variable c = new int[ 5 ]; // create array เราสามารถสร้าง array ที่เป็น object ได้ String b[] = new String[ 100 ];
Array num: int[] num = new int[5];
อะเรย์ (Array) ดัชนี จะเริ่มที่ 0 ดัชนี = 0,1,2,…,n-1 องค์ประกอบของอะเรย์ A[0] 10 A[1] 15 A[2] 70 A[3] 50 A[4] 35 ชื่อของ อะเรย์ A.Length แทนจำนวนสมาชิกของอะเรย์ A ดัชนี จะเริ่มที่ 0 ดัชนี = 0,1,2,…,n-1 เมื่อ n คือจำนวนสมาชิก ดัชนี ค่าที่เก็บในอะเรย์
อะเรย์ (Array) การอ้างถึงสมาชิกใดๆ ของอะเรย์ A[0] หมายถึงการอ้างถึงค่าของสมาชิกของอะเรย์ A ลำดับที่ 0 A[i] หมายถึงการอ้างถึงค่าของสมาชิกของอะเรย์ A ลำดับที่ i A[i+1] หมายถึงการอ้างถึงค่าของสมาชิกของอะเรย์ A ลำดับที่ i+1
การประกาศ และการสร้างอะเรย์ การสร้างอะเรย์ใน Java ต้องมี new เป็นตัวสร้าง รูปแบบง่ายๆ ดังนี้ int A[] = new int[5]; ซึ่งมีความหมายเหมือนกับ int A[]; // declares the array variable A = new int[5]; //create the array เรียก A ว่าเป็น Array reference Int[5] เป็น Array ที่ประกอบด้วยสมาชิก 5 ตัว แต่ละตัว มีชนิดเป็น int
ตัวอย่างการประกาศตัวแปรอะเรย์ String [] b = new String[4]; b[0] = “line0 “; b[1] = “line1”; b[2] = “line2”; b[3] = “line3”; double [] data1,data2; data1 = new int[5]; data2 = new int[3]; double [] array1 = new double[10], array2= new double[20];
int num[ ] = new int[5]; import javax.swing.JOptionPane; class ArrayDefine1 { public static void main (String args[ ] ) { int sum =0, i=0;String str; int num[ ] = new int[5]; str = JOptionPane.showInputDialog("enter Number no:"+(i+1)); num[0] = Integer.parseInt(str); str = JOptionPane.showInputDialog("enter Number no:"+(i+2)); num[1 ]= Integer.parseInt(str); str = JOptionPane.showInputDialog("enter Number no:"+(i+3)); num[2] = Integer.parseInt(str); str = JOptionPane.showInputDialog("enter Number no:"+(i+4)); num[3] = Integer.parseInt(str); str = JOptionPane.showInputDialog("enter Number no:"+(i+5)); num[4] = Integer.parseInt(str); sum = sum+num[0]+num[1]+num[2]+num[3]+num[4]; System.out.println("The Sum of Number " + sum); System.exit(0); }
Arrays ไม่จำเป็นต้องระบุขนาดของ array ในขณะที่ compile โปรแกรมแต่จะต้องกำหนดขนาดในขณะที่รันโปรแกรม(run-time) arrayName.length จะทำให้ทราบขนาดของ array ว่ามีขนาดเท่าใด สามารถใช้ Loops ในการเข้าถึงข้อมูลใน array
ตัวอย่างโปรแกรม รับค่าขนาดของ array ในขณะที่รันโปรแกรม int sum =0, i=0, arraySize=0; String data= JOptionPane.showInputDialog ("Enter the size of the array: "); arraySize = Integer.parseInt(data); int num[] = new int[arraySize];
ขนาดของ Array int[ ] list = {10, 20, 30, 40, 50, 60}; list.length = 6 int a[]; a = new int[15]; a.length = ?
การกำหนดค่าให้กับ array โดยใช้ for int[ ] list = {10, 20, 30, 40, 50, 60}; list.length = 6 for(index = 0; index < list.length; index++) { statement ……… }
import javax.swing.JOptionPane; class ArrayDefine2 { public static void main (String args[ ] ) { int sum =0, i=0; int num[ ] = new int[5]; for ( i=0;i< 5;i++) { String str = JOptionPane.showInputDialog("enter Number no:"+(i+1)); num[i] = Integer.parseInt(str); sum = sum+num[i]; } System.out.println("The Sum of Number " + sum); System.exit(0); ตัวอย่างปฏิบัติ
ถึงที่นี่ หมู่ 01 IT อังคารเช้า import javax.swing.JOptionPane; class ArrayDefine3 { public static void main (String args[ ] ) { int sum =0, i=0, arraySize=0; String data= JOptionPane.showInputDialog("Enter the size of the array: "); arraySize = Integer.parseInt(data); int num[] = new int[arraySize]; for ( i=0;i< num.length;i++) { String str = JOptionPane.showInputDialog("enter Number no:"+(i+1)); num[i] = Integer.parseInt(str); sum = sum+num[i]; } System.out.println("The Sum of Number " + sum); System.exit(0); ถึงที่นี่ หมู่ 01 IT อังคารเช้า
/** Array1_1.java Assign some values to array of ints */ class Array1_1 { public static void main(String[] args) { int[] list; //declare array of int //allocate space for 10 ints //assign values at index 5, 3, and 9 list = new int[10]; list[5] = 8; list[3] = 2; list[9] = 4; for(int i = 0; i <=9 ; i++) System.out.println("list[" + i +"] = " + list[i]); }
/** Array1_2.java Using array to store integers */ class Array1_2 { public static void main(String[] args) { int[] list; //declare array of int list = new int[10]; //allocate space for 10 ints for(int i = 0; i < list.length; i++) System.out.println("list[" + i +"] = " + list[i]); }
import javax.swing.JOptionPane; public class Array1_3 { public static void main(String[] args) { int n,sum ; int student_score[ ] = new int[5]; sum=0; for (n = 0; n <= 4; n++) { String data = JOptionPane.showInputDialog(null,"Enter Score: "); student_score[n] = Integer.parseInt(data); sum+=student_score[n]; } System.exit(0);
import javax.swing.JOptionPane; public class Array1_4 { public static void main(String[] args) { int n,sum ; int student_score[ ] = new int[5]; sum=0; for (n = 0; n <= 4; n++) { String data = JOptionPane.showInputDialog(null,"Enter Score: "); student_score[n] = Integer.parseInt(data); sum+=student_score[n]; } { System.out.println(student_score[n]); System.out.println("SUM = "+ sum); System.exit(0);
Exercise1: Array 1 Dimensions เขียนโปรแกรมเพื่อเก็บข้อมูลในลักษณะของอาร์เรย์ ขนาด 50 ห้อง โดยเก็บข้อมูลประเภท double กำหนดค่าทั้ง 50 ห้องมีค่าเป็นสองเท่าของ หมายเลขห้อง (index) แสดงผลข้อมูลภายในอาร์เรย์ 10 ห้อง ต่อ 1 บรรทัดจนครบทั้งหมด โปรแกรมชื่อ TestArray1.java
Array 2 dimension 2 มิติ ชนิดข้อมูล ตัวแปร[ ][ ] = new ชนิดข้อมูล[element1][element2];
ภาพจินตนาการเรื่องเกี่ยวกับ Array ที่มนุษย์มองเห็น ภาพจินตนาการเรื่องเกี่ยวกับ Array ใน Memory ของเครื่องคอมพิวเตอร์ 16 3 5 10 9 1,1 1,2 2,1 2,2 3,1 6 3,2 4 4,1 15 4,2 Two-Dimension 16 3 5 10 9 6 4 15 Column 1 2 Row 1 Row 2 Row 3 Row 4 Two-Dimension
2- dimension Array Column 1 Column 2 Column 3 Column 4 Row 1 16 3 2 13 Row 2 5 10 11 8 Row 3 9 6 7 12 Row 4 4 15 14 1 SUM = 34
Arrays char student[] = new char[10][20]; student student[0][0] Columns 1 2 3 . . . . . . . . . . . . . . . . . . . . . . . . 19 student[0] . . . . . . . . . . . . . . . . . . . . . student[1] . . . . . . . . . . . . . . . . . . . . . student[2] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Rows Student[9] . . . . . . . . . . . . . . . . . . . . .
Array Two Dimension ตัวแปรชนิด 2 มิติ (Two Dimension) หมายถึง ตัวแปรที่เก็บข้อมูลเป็นตารางซึ่งมีลักษณะข้อมูลเป็นแถว เป็นคอลัมน์ ดังนั้นตัวแปรชุดแบบนี้จะมีตัวเลขแสดงค่าตำแหน่ง 2 ตัว คือตัวหนึ่งจะบอกตำแหน่งของแถวอีกตัวหนึ่งจะบอกตำแหน่งของคอลัมน์ รูปแบบ type array-name [ i ][ j ]; array-name หมายถึงชื่อตัวแปรที่ต้องการประกาศชนิดว่าเป็นตัวแปรชุด i หมายถึงตัวเลขจำนวนเต็มที่แสดงตำแหน่งของแถว ซึ่งเริ่มจากศูนย์เสมอ j หมายถึงตัวเลขจำนวนเต็มที่แสดงตำแหน่งของคอลัมน์ ซึ่งเริ่มจากศูนย์เสมอ
Two-Dimensional Arrays dataType[ ][ ] arrayName = new dataType[intExp1][intExp2]; การเข้าถึงสมาชิกใน array 2 มิติ: arrayName[indexExp1][indexExp2]; intExp1, intExp2 >= 0 indexExp1 = row position indexExp2 = column position ชนิดตัวแปร ตัวแปร[ ][ ] = new ชนิดข้อมูล [element1][element2];
Two-Dimensional Arrays MyNumber ชื่อ Array 11 9 45 12 13 76 90 34 4 1 54 74 7 1 2 Row No. MyNumber แถว 1 คอลัมน์ 4 มีค่า 1 MyNumber แถว 2 คอลัมน์ 3 มีค่า 11 0 1 2 3 4 Column No. เวลาเราจะอ้างถึงข้อมูลใน Array 2 มิติเราจะต้องบอก ชื่อของ Array, หมายเลขแถว และหมายเลขคอลัมน์
แสดงการเก็บข้อมูลใน array สองมิติ
double[][]sales = new double[10][5]; Two-Dimensional Arrays double[][]sales = new double[10][5];
Accessing Two-Dimensional Array Components
ตัวอย่าง การสร้าง array แบบ 2 มิติ ซึ่งกำหนดค่าให้กับสมาชิกของ array ตั้งแต่เริ่มประกาศตัวแปร class AutoMatrix{ public static void main(String args[]){ double m [ ] [ ] = { {0*0, 1*0, 2*0, 3*0}, {0*1, 1*1, 2*1, 3*1}, {0*2, 1*2, 2*2, 3*2}, {0*3, 1*3, 2*3, 3*3} }; System.out.println(m[0][0] +” “+ m[0][1] +“ “+ m[0][2] +“ “+ m[0][3]); System.out.println(m[1][0] +” “+ m[1][1] +“ “+ m[1][2] +“ “+ m[1][3]); System.out.println(m[2][0] +” “+ m[2][1] +“ “+ m[2][2] +“ “+ m[2][3]); System.out.println(m[3][0] +” “+ m[3][1] +“ “+ m[3][2] +“ “+ m[3][3]); }
import javax.swing.JOptionPane; public class Array2_1 { public static void main(String[] args) { int row,col,sum ; int student_score[ ][ ] = new int[5][2]; sum=0; for (row = 0; row <= 4;row++) { for ( col= 0; col <= 1; col++) { String data = JOptionPane.showInputDialog(null,"Enter Score[ "+row+ " ] [" +col+" ] ="); student_score[row][col] = Integer.parseInt(data); sum+=student_score[row][col]; } } for (row = 0; row <= 4; row++) { for ( col = 0;col<=1;col++ ) System.out.println(student_score[row][col]); } System.out.println("SUM = "+ sum); System.exit(0); } }
[3] [4] [2] Array 3 มิติ int numsales[ ][ ][ ] = new int[3][4][2]; 2 HIGH 1 1 ROW 2 3 1 2 3 4 col
import javax.swing.JOptionPane; public class Array3_1 { public static void main(String[] args) { int row,col,high,sum=0 ; int student_score[ ][ ][ ]= new int[3][4][2]; for (row = 0; row <= 2;row++) { for ( col= 0; col <= 3; col++) { for ( high = 0; high <= 1; high++) { String data = JOptionPane.showInputDialog(null,"Enter Score[ "+row+ " ] [" +col+" ] [ "+high+ " ] ="); student_score[row][col][high] = Integer.parseInt(data); sum+=student_score[row][col][high]; } } } for (row = 0; row <= 4; row++) { for ( col = 0;col<=1;col++ ) System.out.println(student_score[row][col] [high] );} } } System.out.println("SUM = "+ sum); System.exit(0); } }
สรุปการประกาศ ตัวแปร Array อย่างง่าย ชนิดข้อมูล ตัวแปร[ ] = new ชนิดข้อมูล [element]; 1 มิติ int ตัวแปร[ ] = new int[element]; 2 มิติ ชนิดข้อมูล ตัวแปร[ ][ ] = new ชนิดข้อมูล [element1][element2]; 3 มิติ ชนิดข้อมูล ตัวแปร[ ][ ][ ] = new ชนิดข้อมูล [element1][element2][element3];
กำหนดค่าทั้ง 25 ห้องแรกมีค่าเป็นสองเท่าของ หมายเลขห้อง (index) ฝึกปฏิบัติ Exercise2: Array 1 Dimensions เขียนโปรแกรมเพื่อเก็บข้อมูลในลักษณะของอาร์เรย์ ขนาด 50 ห้อง โดยเก็บข้อมูลประเภท double กำหนดค่าทั้ง 25 ห้องแรกมีค่าเป็นสองเท่าของ หมายเลขห้อง (index) กำหนดค่า 25 ห้องที่เหลือ ให้แต่ละห้องมีค่าเป็น สามเท่าของค่าหมายเลขห้อง แสดงผลข้อมูลภายในอาร์เรย์ 10 ห้อง ต่อ 1 บรรทัดจนครบทั้งหมด โปรแกรมชื่อ TestArray2.java
Exercise3: Array 1 Dimensions ฝึกปฏิบัติ เขียนโปรแกรมเพื่อเก็บข้อมูลในลักษณะของอาร์เรย์ ขนาด 10 ห้อง โดยเก็บข้อมูลประเภท int กำหนดข้อมูลเป็น 57, 66, 12, 43, 89, 24, 8, 26, 48, 99 หาค่าต่ำสุดของข้อมูลภายในอาร์เรย์ พร้อมแสดงผล แสดงผลข้อมูลภายในอาร์เรย์แบบย้อนกลับ เช่น 99 48 26 8 24 89 43 12 66 57 โปรแกรมชื่อ TestArray3.java
ให้เขียนโปรแกรมชื่อ workshops5.java ฝึกปฏิบัติ ให้เขียนโปรแกรมชื่อ workshops5.java สมมุติให้บริษัทขายอุปกรณ์การ์ดจอ(VGA Card)คอมพิวเตอร์แห่งหนึ่งมีพนักงานขาย 20 คนแต่ละคนมีเขตพื้นที่การขาย 3 พื้นที่การขาย(1=กรุงเทพ 2=นนทบุรี 3= สมุทรปราการ) แต่ละเขตการขายมีสินค้า 2 ประเภท(1= เกรดคุณภาพดี 2= เกรดปานกลาง) ให้เขียนโปรแกรมรับจำนวนสินค้าที่พนักงานขายทั้งหมดขายได้ทุกๆพื้นที่การขายและทุกคุณภาพสินค้าและแสดงจำนวนสินค้าทั้งหมดของพนักงานขายทั้ง 20 คนทุกพื้นที่การขาย ทุกประเภทสินค้าออกทางจอภาพ หมายเหตุ. ให้กำหนดใช้ array 3 มิติ
การบ้านส่งคราวหน้า The End เช็คชื่อ
ได้คะแนน >= 9 ได้เกรด A ได้คะแนน >= 7 ได้เกรด B ผลการทำข้อสอบปลายภาคของนักศึกษาคณะอุตศาสตร์สาหกรรมแบบ true-false โดยสมมติให้มีการเก็บข้อมูลของนักศึกษาไว้ดังตารางด้านขวาและด้านขวาเป็นคำเฉลยที่ถูกต้อง id answer 0080 FTFFTFTTFT 0340 FTFTFTTTFF 0341 FTTFTTTTFT 0401 FFTTFTTFTT 0462 TFFTTTFFTF คำเฉลยที่ถูกต้อง FTFFTFFTFT work1_6.java ให้เขียนโปรแกรมเพื่ออ่านคำเฉลยที่ถูกต้องไปไว้ในหน่วยความจำ ลำดับต่อไปอ่านคำตอบของนักศึกษาแต่ละคนไปตรวจกับคำเฉลยที่ถูกต้องแล้วสรุปคะแนนที่ได้ไว้ที่อะเรย์ สุดท้ายให้ตัดเกรดของนักศึกษา โดยมีเงื่อนไข เก็บข้อมูลรหัสนักศึกษา, คะแนน,เกรดไว้ที่โครงสร้างแบบอะเรย์หนึ่งมิติไว้ในหน่วยความจำ และแสดงออกทางหน้าจอ ได้คะแนน >= 9 ได้เกรด A ได้คะแนน >= 7 ได้เกรด B ได้คะแนน >= 5 ได้เกรด C ได้คะแนน >= 3 ได้เกรด D ได้คะแนน <3 ได้เกรด F Id score grade 0080 9 A 0340 5 C 0341 7 B 0401 2 F 0462 4 D