อาร์เรย์ (Array)

75
ออออออออ (Array) บบบบบ 1

description

บทที่ 1. อาร์เรย์ (Array). 5. 2. 3. 4. 1. 6. การสร้างอาร์เรย์ 2 มิติ. การคัดลอกข้อมูลในอาร์เรย์. การค้นหาข้อมูลในอาร์เรย์. การจัดเรียงข้อมูลในอาร์เรย์ (Sort). การใช้พื้นที่ในหน่วยความจำร่วมกันของอาร์เรย์. การใช้อาร์เรย์สองมิติที่แต่ละแถวมีข้อมูลไม่เท่ากัน. อาร์เรย์. อาร์เรย์. - PowerPoint PPT Presentation

Transcript of อาร์เรย์ (Array)

Page 1: อาร์เรย์  (Array)

อาร์�เร์ย์� (Array)

บทท�� 1

Page 2: อาร์เรย์  (Array)

อาร์�เร์ย์�

ผศ . พิ�เชษฐ์� ศ�ร์�ร์�ตนไพิศาลกุ�ล

กุาร์สร์�างอาร์�เร์ย์� 2 มิ�ต�5

กุาร์คั�ดลอกุข้�อมิ�ลในอาร์�เร์ย์�2

กุาร์คั�นหาข้�อมิ�ลในอาร์�เร์ย์�3

กุาร์จั�ดเร์!ย์งข้�อมิ�ลในอาร์�เร์ย์� (Sort)4

2

กุาร์ใช�พิ"#นที่!%ในหน&วย์คัวามิจั(าร์&วมิกุ�นข้องอาร์�เร์ย์�

1

กุาร์ใช�อาร์�เร์ย์�สองมิ�ต�ที่!%แต&ละแถวมิ!ข้�อมิ�ลไมิ&เที่&ากุ�น

6

Page 3: อาร์เรย์  (Array)

อาร์�เร์ย์�

เช่�นint[] students;double[] amounts;char[] letters;หรื�อint students[];double amounts[];char letters[];

ผศ . พิ�เชษฐ์� ศ�ร์�ร์�ตนไพิศาลกุ�ล3

ชน�ดข้องต�วแปร์อาร์�เร์ย์�[] ช"%อข้องต�วแปร์;

ชน�ดข้องต�วแปร์อาร์�เร์ย์�[] ช"%อข้องต�วแปร์;

Page 4: อาร์เรย์  (Array)

อาร์�เร์ย์�

การืจองพื้��นท��ในหน�วยความจ�าสามารืถท�าได้�ด้�งน��int[] students = new int[5];

ผศ . พิ�เชษฐ์� ศ�ร์�ร์�ตนไพิศาลกุ�ล4

ด้�ช่น�ของอารื เรืย stu

ใช่� ค�าส� �ง new ในการืจองพื้��นท��ท�� ช่น"ด้ int จ�านวน

5 ตั�ว

stu[0]

stu [3]

stu [4]

stu [1]

stu [2]

int [] stu = new int[5];

ปรืะกาศอารื เรืย ใช่�เก'บเลขจ�านวนเตั'ม

ช่��อของ อารื เรืย

ช่น"ด้ของข�อม)ลท��เก'บได้�

stu.length จะม�ค�าเท�าก�บ 5

0 0 0 0 0

Page 5: อาร์เรย์  (Array)

กุาร์กุ(าหนดคั&าเร์�%มิต�นให�กุ�บอาร์�เร์ย์�

class array1 { public static void main (String[] args)

{ int[] stu = new int[5]; for (int i=0; i<stu.length; i++) { System.out.printf("stu[%d]

= %d%n",i,stu[i]); } }}

ผศ . พิ�เชษฐ์� ศ�ร์�ร์�ตนไพิศาลกุ�ล5

Page 6: อาร์เรย์  (Array)

กุาร์กุ(าหนดคั&าเร์�%มิต�นให�กุ�บอาร์�เร์ย์�

ผลล�พื้ธ์ ท��ได้�ค�อstu[ 0 0] =stu[ 1 0] =stu[ 2 0] =stu[ 3 0] =stu[ 4 0] =

ผศ . พิ�เชษฐ์� ศ�ร์�ร์�ตนไพิศาลกุ�ล6

Page 7: อาร์เรย์  (Array)

กุาร์กุ(าหนดคั&าเร์�%มิต�นให�กุ�บอาร์�เร์ย์�

class array2 { public static void main (String[] args) { int[] stu = new int[7]; stu[1] = 5; stu[3] = 7; stu[6] = 6; for (int i=0; i<stu.length; i++) { System.out.printf("stu[%d] = %d

%n",i,stu[i]); } } }

ผศ . พิ�เชษฐ์� ศ�ร์�ร์�ตนไพิศาลกุ�ล7

Page 8: อาร์เรย์  (Array)

กุาร์กุ(าหนดคั&าเร์�%มิต�นให�กุ�บอาร์�เร์ย์�

ผลล�พื้ธ์ ท��ได้�ค�อstu[ 0 0] =stu[ 515

stu[ 2 0] =stu[ 537

stu[ 4 0] =stu[ 5 0] =stu[ 6 6] =

ผศ . พิ�เชษฐ์� ศ�ร์�ร์�ตนไพิศาลกุ�ล8

Page 9: อาร์เรย์  (Array)

กุาร์กุ(าหนดคั&าเร์�%มิต�นให�กุ�บอาร์�เร์ย์�

class array3 { public static void main (String[] args) { int[] arr = {8,9,6,3}; for (int i=0; i<arr.length; i++) { System.out.printf("arr[%d] =

%d%n",i,arr[i]); } }}

ผศ . พิ�เชษฐ์� ศ�ร์�ร์�ตนไพิศาลกุ�ล9

Page 10: อาร์เรย์  (Array)

กุาร์กุ(าหนดคั&าเร์�%มิต�นให�กุ�บอาร์�เร์ย์�

ผลล�พื้ธ์ ท��ได้�เป-นด้�งน��arr[ 508

arr[ 519

arr[ 2 6] =arr[ 3 3] =

ผศ . พิ�เชษฐ์� ศ�ร์�ร์�ตนไพิศาลกุ�ล10

Page 11: อาร์เรย์  (Array)

กุาร์ร์�บข้�อมิ�ลเข้�าที่างคั!ย์�บอร์�ดเพิ"%อเกุ.บคั&าไว�ในอาร์�เร์ย์�

import java.util.Scanner; class array4 { public static void main (String[] args) { Scanner input = new Scanner(System.in); int[] arr; int num,sum=0 ; double average = 00. ; System.out.print("How many number do you

want:"); num = input.nextInt(); arr = new int[num];

ผศ . พิ�เชษฐ์� ศ�ร์�ร์�ตนไพิศาลกุ�ล11

Page 12: อาร์เรย์  (Array)

กุาร์ร์�บข้�อมิ�ลเข้�าที่างคั!ย์�บอร์�ดเพิ"%อเกุ.บคั&าไว�ในอาร์�เร์ย์�

for (int i=0 ; i<arr.length; i++) { System.out.printf("input arr[%d] :",i); arr[i] = input.nextInt(); sum += arr[i]; } average = sum/arr.length; System.out.printf("Sum is %d%n",sum); System.out.printf("Average is %.2 f%n",average); } }

ผศ . พิ�เชษฐ์� ศ�ร์�ร์�ตนไพิศาลกุ�ล12

Page 13: อาร์เรย์  (Array)

กุาร์ร์�บข้�อมิ�ลเข้�าที่างคั!ย์�บอร์�ดเพิ"%อเกุ.บคั&าไว�ในอาร์�เร์ย์�

เม��อรื�นโปรืแกรืมแล�วทด้ลองก�าหนด้ขนาด้ของอารื เรืย เป-น 4 แล�วใส�ตั�วเลข 9 8 6 3 ผลล�พื้ธ์ ท��ได้�เป-นด้�งน��

How many number do you want:4input arr[ 09input arr[ 1 8] :input arr[ 2 6] :input arr[ 3 3] :Sum is 26Average is 600

ผศ . พิ�เชษฐ์� ศ�ร์�ร์�ตนไพิศาลกุ�ล13

Page 14: อาร์เรย์  (Array)

กุาร์ใช�พิ"#นที่!%ในหน&วย์คัวามิจั(าร์&วมิกุ�นข้องอาร์�เร์ย์�

class array5 { public static void main (String[] args) { int[] arr = {8,9,6,3}; System.out.println("*** Before ***"); for (int i=0; i<arr.length; i++) { System.out.printf("arr[%d] = %d

%n",i,arr[i]); }

ผศ . พิ�เชษฐ์� ศ�ร์�ร์�ตนไพิศาลกุ�ล14

Page 15: อาร์เรย์  (Array)

กุาร์ใช�พิ"#นที่!%ในหน&วย์คัวามิจั(าร์&วมิกุ�นข้องอาร์�เร์ย์�

int[] newArr = arr; newArr[1] = 4; newArr[3] = 2; System.out.println("*** After ***"); for (int i=0; i<arr.length; i++) { System.out.printf("arr[%d] = %d

%n",i,arr[i]); } } }

ผศ . พิ�เชษฐ์� ศ�ร์�ร์�ตนไพิศาลกุ�ล15

Page 16: อาร์เรย์  (Array)

กุาร์ใช�พิ"#นที่!%ในหน&วย์คัวามิจั(าร์&วมิกุ�นข้องอาร์�เร์ย์�

ผลล�พื้ธ์ ท��ได้�ค�อ *** Before *** arr[ 0 8] = arr[ 1] = 9 arr[ 2] = 6 arr[ 3 3] = *** After *** arr[ 0 8] = arr[ 514

arr[ 2] = 6 arr[ 3 2] =

ผศ . พิ�เชษฐ์� ศ�ร์�ร์�ตนไพิศาลกุ�ล16

Page 17: อาร์เรย์  (Array)

กุาร์คั�ดลอกุข้�อมิ�ลในอาร์�เร์ย์�

ท�าได้�สามว"ธ์� ว"ธ์�แรืกเรืาตั�องท�าการืสรื�างอารื เรืย อ�กช่0ด้หน1�งแล�วท�าการืค�ด้ลอกข�อม)ลจากอารื เรืย ตั�วเด้"มมาไว�ในอารื เรืย

ตั�วใหม�ท�ละข�อม)ล ๆ ไปเรื��อย ๆ จนข�อม)ลหมด้ ท�าได้�ด้�งตั�วอย�างตั�อไปน��

ผศ . พิ�เชษฐ์� ศ�ร์�ร์�ตนไพิศาลกุ�ล17

Page 18: อาร์เรย์  (Array)

กุาร์คั�ดลอกุข้�อมิ�ลในอาร์�เร์ย์�

class array6 { public static void main (String[] args) { int[] arr = {8,9,6,3}; int[]newArr = new int[arr.length]; for (int i=0; i<arr.length; i++) { System.out.printf("arr[%d] = %d

%n",i,arr[i]); }

ผศ . พิ�เชษฐ์� ศ�ร์�ร์�ตนไพิศาลกุ�ล18

Page 19: อาร์เรย์  (Array)

กุาร์คั�ดลอกุข้�อมิ�ลในอาร์�เร์ย์�

for (int i=0; i<arr.length; i++) { newArr[i] = arr[i]; } for (int i=0; i<newArr.length; i++) { System.out.printf("newArr[%d] =

%d%n",i,newArr[i]); } } }

ผศ . พิ�เชษฐ์� ศ�ร์�ร์�ตนไพิศาลกุ�ล19

Page 20: อาร์เรย์  (Array)

กุาร์คั�ดลอกุข้�อมิ�ลในอาร์�เร์ย์�

ผลล�พื้ธ์ ท��ได้�ค�อarr[ 508

arr[ 519

arr[ 2 6] =arr[ 3 3] =newArr[ 0 8] =newArr[ 1 9] =newArr[ 2 6] =newArr[ 3 3] =

ผศ . พิ�เชษฐ์� ศ�ร์�ร์�ตนไพิศาลกุ�ล20

Page 21: อาร์เรย์  (Array)

กุาร์คั�ดลอกุข้�อมิ�ลในอาร์�เร์ย์�

ว"ธ์�ท��สองตั�องใช่�เมด้ธ์อด้ (Method) arraycopy() ท�าการืค�ด้ลอกข�อม)ลจากอารื เรืย ตั�นทางไปย�งอารื เรืย ปลาย

ทาง ด้�งตั�วอย�างตั�อไปน��

ผศ . พิ�เชษฐ์� ศ�ร์�ร์�ตนไพิศาลกุ�ล21

Page 22: อาร์เรย์  (Array)

กุาร์คั�ดลอกุข้�อมิ�ลในอาร์�เร์ย์�

class array7 { public static void main(String[] args) { int[] arr = {8,9,6,3}; int[] newArr = new int[arr.length]; System.arraycopy(arr, 0, newArr, 0,

arr.length); for(int i = 0; i < newArr.length; i++) System.out.printf("newArr[%d] = %d

%n",i,newArr[i]); } }

ผศ . พิ�เชษฐ์� ศ�ร์�ร์�ตนไพิศาลกุ�ล22

Page 23: อาร์เรย์  (Array)

กุาร์คั�ดลอกุข้�อมิ�ลในอาร์�เร์ย์�

ผลล�พื้ธ์ ท��ได้�ค�อnewArr[ 0 8] =newArr[ 1 9] =newArr[ 2 6] =newArr[ 3 3] =

ผศ . พิ�เชษฐ์� ศ�ร์�ร์�ตนไพิศาลกุ�ล23

Page 24: อาร์เรย์  (Array)

กุาร์คั�ดลอกุข้�อมิ�ลในอาร์�เร์ย์�

จากบรืรืท�ด้ System.arraycopy(arr, 0, newArr, 0, arr.length); ภายในวงเล'บม�ตั�วแปรื 5 ตั�ว โด้ยม�เง��อนไขด้�งน��

ตั�วแปรืตั�วแรืกเป-นอารื เรืย ตั�นทางท��ตั�องการืค�ด้ลอก(arr)

ตั�วแปรืตั�วท��สองเป-นด้�ช่น�เรื"�มตั�นของอารื เรืย ตั�นทาง(0)

ตั�วแปรืตั�วท��สามเป-นอารื เรืย ปลายทางท��ตั�องการืสรื�าง(newArr)

ตั�วแปรืตั�วท��ส��เป-นด้�ช่น�เรื"�มตั�นของอารื เรืย ปลายทาง(0)

ตั�วแปรืตั�วท��ห�าเป-นขนาด้ของข�อม)ลท��ตั�องการืค�ด้ลอก(arr.length)

ผศ . พิ�เชษฐ์� ศ�ร์�ร์�ตนไพิศาลกุ�ล24

Page 25: อาร์เรย์  (Array)

กุาร์คั�ดลอกุข้�อมิ�ลในอาร์�เร์ย์�

ค�ด้ลอกข�อม)ลโด้ยใข�ค�าส��ง System.arraycopy() สามารืถค�ด้ลอกข�อม)ลบางส�วนได้� ไม�จ�าเป-นตั�องค�ด้ลอก

ข�อม)ลท��งหมด้ แสด้งได้�ด้�งตั�วอย�างตั�อไปน��

ผศ . พิ�เชษฐ์� ศ�ร์�ร์�ตนไพิศาลกุ�ล25

Page 26: อาร์เรย์  (Array)

กุาร์คั�ดลอกุข้�อมิ�ลในอาร์�เร์ย์�

class array8 { public static void main(String[] args) { int[] arr = {8,9,6,3}; int[] newArr = new int[arr.length-1]; System.arraycopy(arr, 1, newArr, 0,

arr.length - 2); for(int i=0;i<newArr.length;i++) System.out.printf("newArr[%d] =

%d%n",i, newArr[i]); } }

ผศ . พิ�เชษฐ์� ศ�ร์�ร์�ตนไพิศาลกุ�ล26

Page 27: อาร์เรย์  (Array)

กุาร์คั�ดลอกุข้�อมิ�ลในอาร์�เร์ย์�

ผลล�พื้ธ์ ท��ได้�ค�อnewArr[ 0 9] =newArr[ 1 6] =newArr[ 2 0] =

ผศ . พิ�เชษฐ์� ศ�ร์�ร์�ตนไพิศาลกุ�ล27

Page 28: อาร์เรย์  (Array)

กุาร์คั�ดลอกุข้�อมิ�ลในอาร์�เร์ย์�

ว"ธ์�ท��สามใช่�เมด้ธ์อด้ clone() ซึ่1�งเป-นการืค�ด้ลอกข�อม)ล จากอารื เรืย ตั�นทางไปย�งปลายทางเช่�นก�น พื้"จารืณา

ตั�วอย�างตั�อไปน��

ผศ . พิ�เชษฐ์� ศ�ร์�ร์�ตนไพิศาลกุ�ล28

Page 29: อาร์เรย์  (Array)

กุาร์คั�ดลอกุข้�อมิ�ลในอาร์�เร์ย์�

class array9 { public static void main(String[] args) { int[] arr = {8,9,6,3}; int[] newArr = (int[])arr.clone(); for(int i=0;i<newArr.length;i++)

System.out.printf("newArr[%d] = %d%n",i, newArr[i]);

} }

ผศ . พิ�เชษฐ์� ศ�ร์�ร์�ตนไพิศาลกุ�ล29

Page 30: อาร์เรย์  (Array)

กุาร์คั�ดลอกุข้�อมิ�ลในอาร์�เร์ย์�

ผลล�พื้ธ์ ท��ได้�ค�อnewArr[ 0 8] =newArr[ 1 9] =newArr[ 2 6] =newArr[ 3 3] =

ผศ . พิ�เชษฐ์� ศ�ร์�ร์�ตนไพิศาลกุ�ล30

Page 31: อาร์เรย์  (Array)

กุาร์คั�นหาข้�อมิ�ลในอาร์�เร์ย์�

การืค�นหาข�อม)ลในอารื เรืย สามารืถท�าได้� 2 ว"ธ์� ค�อ การืค�นหาแบบเรื�ยงล�าด้�บ (Sequential search) และการืค�นหาแบบไบนารื� (Binary search)

ผศ . พิ�เชษฐ์� ศ�ร์�ร์�ตนไพิศาลกุ�ล31

Page 32: อาร์เรย์  (Array)

กุาร์คั�นหาข้�อมิ�ลในอาร์�เร์ย์�

กุาร์คั�นหาแบบเร์!ย์งล(าด�บ (Sequential search) ในการืค�นหาข�อม)ลแบบเรื�ยงล�าด้�บน��นก'ค�อเรืาตั�อง

เรื"�มตั�นค�นหาข�อม)ลตั��งแตั�ตั�วแรืกส0ด้ในอารื เรืย โด้ยท�าการืเปรื�ยบเท�ยบข�อม)ลท��เรืาตั�องการืค�นหาก�บข�อม)ลในอารื เรืย

ว�าตัรืงก�นหรื�อไม� ถ�าตัรืงก�นก'ให�หย0ด้ค�นหา แตั�ถ�าค�นหาไป จนกรืะท��งถ1งช่�องส0ด้ท�ายก'ย�งไม�เจอ น��นแสด้งว�าข�อม)ลท�� เรืาตั�องการืค�นหาไม�อย)�ในอารื เรืย น��น พื้"จารืณาตั�วอย�างตั�อ

ไปน��

ผศ . พิ�เชษฐ์� ศ�ร์�ร์�ตนไพิศาลกุ�ล32

Page 33: อาร์เรย์  (Array)

กุาร์คั�นหาแบบเร์!ย์งล(าด�บ (Sequential search)

class array10 { public static void main(String[] args) { int[] arr = {8,9,6,3}; int num = 9; int i = 0; for (i=0;i<arr.length;i++) { if(num == arr[i]){ System.out.printf("%d is in

array.%n",num); break; } } if (i == arr.length) System.out.printf("%d is not in array.%n",num); } }

ผศ . พิ�เชษฐ์� ศ�ร์�ร์�ตนไพิศาลกุ�ล33

Page 34: อาร์เรย์  (Array)

กุาร์คั�นหาแบบเร์!ย์งล(าด�บ (Sequential search)

ผลล�พื้ธ์ ท��ได้�ค�อ9 is in array.

การืค�นหาข�อม)ลแบบน��อาจด้)เป-นการืค�นหาท��ง�ายตั�อการืเข�ยนโปรืแกรืมเพื้รืาะจะท�าการืเรื"�มตั�นค�นหาข�อม)ลตั��งแตั�ตั�ว

แรืกไปจนถ1งตั�วส0ด้ท�าย ถ�าเจอตั��งแตั�ตั�น ๆ ก'ด้� แตั�ถ�าไม�เจอก'ตั�องค�นหาไปจนถ1งตั�วส0ด้ท�ายก�อนถ1งจะบอกได้�ว�าไม�

เจอ ถ�าข�อม)ลในอารื เรืย ม�จ�านวนมาก จะท�าให�เส�ยเวลาในการืค�นหานานมากกว�าจะรื) �ว�าไม�เจอ

ผศ . พิ�เชษฐ์� ศ�ร์�ร์�ตนไพิศาลกุ�ล34

Page 35: อาร์เรย์  (Array)

กุาร์คั�นหาแบบไบนาร์!% (Binary search)

หล�กการืค"ด้ค�อเรืาจะตั�องท�าการืแบ�งข�อม)ลออกเป-นสองส�วนก�อน จะเรื"�มท�าการืค�นหาข�อม)ลท0กครื��ง โด้ยข�อม)ลท��เรืาตั�องการืจะค�นหา

ตั�องน�าไปเปรื�ยบเท�ยบก�บข�อม)ลในอารื เรืย ณ ตั�าแหน�งก1�งกลาง ของอารื เรืย ถ�าข�อม)ลท��เรืาตั�องการืค�นหาม�ค�าน�อยกว�าตั�าแหน�งน��

เรืาจะท�าการืค�นหาข�อม)ลตั�อไปทางด้�านซึ่�ายของอารื เรืย ช่0ด้น�� แตั�ถ�าข�อม)ลท��ตั�องการืค�นหาม�ค�ามากกว�าตั�าแหน�งก1�งกลางน�� เรืา

จะท�าการืค�นหาข�อม)ลตั�อไปทางด้�านขวาของอารื เรืย ช่0ด้น�� ท�าเช่�นน�� ไปเรื��อย ๆ จนกว�าจะพื้บข�อม)ลท��ตั�องการืค�นหา หรื�อไม�ก'หย0ด้ถ�าไม�

เจอข�อม)ลน��น แตั�การืค�นหาข�อม)ลแบบไบนารื�น� �นจ�าเป-นตั�องจ�ด้เรื�ยงข�อม)ลให�

เรื�ยงล�าด้�บจากน�อยไปหามาก มาก�อนท�าการืค�นหาข�อม)ล ม"ฉะน��น จะท�าการืค�นหาแบบไบนารื�ไม�ได้�

ผศ . พิ�เชษฐ์� ศ�ร์�ร์�ตนไพิศาลกุ�ล35

Page 36: อาร์เรย์  (Array)

กุาร์คั�นหาแบบไบนาร์!% (Binary search)

class array11 { public static void main(String[] args) { int[] arr =

{0,1,2,3,4,5,6,7,8,9,10}; int num=3; int head = 0; int tail = arr.length - 1; int middle; boolean found = false;

ผศ . พิ�เชษฐ์� ศ�ร์�ร์�ตนไพิศาลกุ�ล36

Page 37: อาร์เรย์  (Array)

กุาร์คั�นหาแบบไบนาร์!% (Binary search)

while(head <= tail) { middle = (head + tail) / 2; if(num == arr[middle]) { found = true; break; } else if(num < arr[middle]) tail = middle - 1; else head = middle + 1; }

ผศ . พิ�เชษฐ์� ศ�ร์�ร์�ตนไพิศาลกุ�ล37

Page 38: อาร์เรย์  (Array)

กุาร์คั�นหาแบบไบนาร์!% (Binary search)

if(found) System.out.printf("Found

%d.%n",num); else System.out.printf("%d not

found.%n",num); } }

ผศ . พิ�เชษฐ์� ศ�ร์�ร์�ตนไพิศาลกุ�ล38

Page 39: อาร์เรย์  (Array)

กุาร์คั�นหาแบบไบนาร์!% (Binary search)

ผลล�พื้ธ์ ท��ได้�ค�อFound 3.

จากตั�วอย�างท��ผ�านมาอาจด้)เหม�อนว�ายากตั�องเข�ยน โปรืแกรืมยาวกว�าจะได้�ค�าตัอบ ซึ่1�งท��จรื"งแล�ว จาวาม�เมด้ธ์

อด้หน1�งท��ช่��อว�า binalrySearch() เป-นเมด้ธ์อด้ท��ท�าการื ค�นหาแบบไบนารื�ให�เรืาได้� (แตั�ข�อม)ลตั�องเรื�ยงจากน�อยไป

หามาก )

ผศ . พิ�เชษฐ์� ศ�ร์�ร์�ตนไพิศาลกุ�ล39

Page 40: อาร์เรย์  (Array)

กุาร์คั�นหาแบบไบนาร์!% (Binary search)

import java.util.Arrays; class array12 { public static void main(String[] args) { int[] arr = {0,1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; int num = 3; int found = Arrays.binarySearch(arr, num); if(found >= 0) System.out.printf("Found %d at index %d.

%n",num,found); else System.out.printf("%d is not in array.

%n",found); } }

ผศ . พิ�เชษฐ์� ศ�ร์�ร์�ตนไพิศาลกุ�ล40

Page 41: อาร์เรย์  (Array)

กุาร์คั�นหาแบบไบนาร์!% (Binary search)

ผลล�พื้ธ์ ค�อFound 3 at index 3.

ผศ . พิ�เชษฐ์� ศ�ร์�ร์�ตนไพิศาลกุ�ล41

Page 42: อาร์เรย์  (Array)

กุาร์จั�ดเร์!ย์งข้�อมิ�ลในอาร์�เร์ย์�(Sort)

ในกรืณ�จากจ�ด้เรื�ยงข�อม)ลจากน�อยไปหามากก'เช่�นก�น สามารืถท�าได้�ด้�วยการืใช่�เมด้ธ์อด้ Arrays.sort() ด้�ง

ตั�วอย�างตั�อไปน��

ผศ . พิ�เชษฐ์� ศ�ร์�ร์�ตนไพิศาลกุ�ล42

Page 43: อาร์เรย์  (Array)

กุาร์จั�ดเร์!ย์งข้�อมิ�ลในอาร์�เร์ย์�(Sort)

import java.util.Arrays; class array13 { public static void main(String[] args) { int[] arr = new int[20]; int i; for(i = 0; i < arr.length; i++) arr[i] = (int)(Math.random() * 100 + 1); for(i = 0; i < arr.length; i++) { if(i % 10 == 0) System.out.println(); System.out.printf("%d \t",arr[i]); }

ผศ . พิ�เชษฐ์� ศ�ร์�ร์�ตนไพิศาลกุ�ล43

Page 44: อาร์เรย์  (Array)

กุาร์จั�ดเร์!ย์งข้�อมิ�ลในอาร์�เร์ย์�(Sort)

System.out.println(); Arrays.sort(arr); for(int j = 0; j < arr.length; j++) { if(j % 10 == 0) System.out.println(); System.out.printf("%d \t",arr[j]); } System.out.println(); } }

ผศ . พิ�เชษฐ์� ศ�ร์�ร์�ตนไพิศาลกุ�ล44

Page 45: อาร์เรย์  (Array)

กุาร์จั�ดเร์!ย์งข้�อมิ�ลในอาร์�เร์ย์�(Sort)

ผลล�พื้ธ์ ท��ได้�ค�อ 57 2 78 93 69 11 83 50 9

12

90 31 56 90 72 85 80 90 38

85

  2 9 11 12 31 38 50 56 57

69 72 78 80 83 85 85 90 90 90

93

ผศ . พิ�เชษฐ์� ศ�ร์�ร์�ตนไพิศาลกุ�ล45

Page 46: อาร์เรย์  (Array)

กุาร์สร์�างอาร์�เร์ย์� 2 มิ�ต�

ในการืปรืะกาศอารื เรืย สองม"ตั"สามารืถท�าได้�ด้�วยการืเพื้"�ม เครื��องหมาย [] เข�าไปอ�กหน1�งตั�วจากเด้"มเพื้��อเป-นการืบอก

จาวาว�าม�สองม"ตั" ตั�วอย�างเช่�นint [] [] arr2 = new int[5][5];

ซึ่1�งหมายถ1งการืปรืะกาศ arr2 ให�เป-นอารื เรืย 2 ม"ตั" ท��ม� 5 แถว ๆ ละ 5 ช่�อง ด้�งรื)ป

ผศ . พิ�เชษฐ์� ศ�ร์�ร์�ตนไพิศาลกุ�ล46

Page 47: อาร์เรย์  (Array)

กุาร์สร์�างอาร์�เร์ย์� 2 มิ�ต�

ผศ . พิ�เชษฐ์� ศ�ร์�ร์�ตนไพิศาลกุ�ล47

int [] [] arr2 = new int [5] [5];

ด�ชน!ข้องข้�อมิ�ลในแต&ละแถว

arr2[0]

arr2 [1]

arr2 [2]

arr2 [3]

arr2 [4]

[0]

[1]

[3]

[2]

[4]

ช"%อข้อง array และ ด�ชน!ข้องข้�อมิ�ลแต&ละต�ว

(index)

Page 48: อาร์เรย์  (Array)

กุาร์สร์�างอาร์�เร์ย์� 2 มิ�ต�

class array14 { public static void main(String[] args) { int[][] arr2 = new int[5][5]; for(int i = 0; i < arr2.length; i++) { for(int j = 0; j < arr2[i].length; j++)

{ System.out.printf("%d \

t",arr2[i][j]); } System.out.println(); } } }

ผศ . พิ�เชษฐ์� ศ�ร์�ร์�ตนไพิศาลกุ�ล48

Page 49: อาร์เรย์  (Array)

กุาร์สร์�างอาร์�เร์ย์� 2 มิ�ต�

ผลล�พื้ธ์ ท��ได้�ค�อ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

ผศ . พิ�เชษฐ์� ศ�ร์�ร์�ตนไพิศาลกุ�ล49

Page 50: อาร์เรย์  (Array)

กุาร์สร์�างอาร์�เร์ย์� 2 มิ�ต�

class array15 { public static void main(String[] args) { int[][] arr2 = new int[5][5]; for(int i = 0; i < arr2.length; i++) { for(int j = 0; j < arr2[i].length; j++)

{ arr2[i][j] = (int)

(Math.random() * 10 + 1); } }

ผศ . พิ�เชษฐ์� ศ�ร์�ร์�ตนไพิศาลกุ�ล50

Page 51: อาร์เรย์  (Array)

กุาร์สร์�างอาร์�เร์ย์� 2 มิ�ต�

for(int i = 0; i < arr2.length; i++) { for(int j = 0; j < arr2[i].length; j++)

{ System.out.printf("%d \

t",arr2[i][j]); } System.out.println(); } } }

ผศ . พิ�เชษฐ์� ศ�ร์�ร์�ตนไพิศาลกุ�ล51

Page 52: อาร์เรย์  (Array)

กุาร์สร์�างอาร์�เร์ย์� 2 มิ�ต�

ผลล�พื้ธ์ ท��ได้�ค�อ 5 8 6 8 5 1 1 5 10 6 7 8 10 5 7 9 1 1 7 9 5 7 10 7 4

ผศ . พิ�เชษฐ์� ศ�ร์�ร์�ตนไพิศาลกุ�ล52

Page 53: อาร์เรย์  (Array)

กุาร์สร์�างอาร์�เร์ย์� 2 มิ�ต�

ในการืปรืะกาศอารื เรืย 2 ม"ตั"แล�วก�าหนด้ค�าเรื"�มตั�นท��ไม�ใช่� ศ)นย ให�ก�บอารื เรืย สามารืถท�าได้�โด้ยไม�ตั�องส0�มตั�วเลข ลอง

พื้"จารืณาตั�วอย�างตั�อไปน��

ผศ . พิ�เชษฐ์� ศ�ร์�ร์�ตนไพิศาลกุ�ล53

Page 54: อาร์เรย์  (Array)

กุาร์สร์�างอาร์�เร์ย์� 2 มิ�ต�

class array16 { public static void main(String[] args) { int[][] arr2 = { {9, 8, 7},{6, 5, 4},{3, 2, 1} }; for(int i = 0; i < arr2.length; i++) { for(int j = 0; j < arr2[i].length; j++){ System.out.printf("%d \t",arr2[i][j]); } System.out.println(); } } }

ผศ . พิ�เชษฐ์� ศ�ร์�ร์�ตนไพิศาลกุ�ล54

Page 55: อาร์เรย์  (Array)

กุาร์สร์�างอาร์�เร์ย์� 2 มิ�ต�

ผลล�พื้ธ์ ท��ได้�ค�อ 9 8 7 6 5 4 3 2 1

ผศ . พิ�เชษฐ์� ศ�ร์�ร์�ตนไพิศาลกุ�ล55

Page 56: อาร์เรย์  (Array)

กุาร์ใช�อาร์�เร์ย์�สองมิ�ต�ที่!%แต&ละแถวมิ!ข้�อมิ�ลไมิ&เที่&ากุ�น

class array17 { public static void main(String[]

args) { double[][] arr2 = new

double[4][]; arr2[0] = new double[4]; arr2[1] = new double[3]; arr2[2] = new double[2]; arr2[3] = new double[1];

ผศ . พิ�เชษฐ์� ศ�ร์�ร์�ตนไพิศาลกุ�ล56

Page 57: อาร์เรย์  (Array)

กุาร์ใช�อาร์�เร์ย์�สองมิ�ต�ที่!%แต&ละแถวมิ!ข้�อมิ�ลไมิ&เที่&ากุ�น

for(int i = 0; i < arr2.length; i++) { for(int j = 0; j < arr2[i].length; j++){ System.out.printf("%.2f \t",arr2[i][j]); } System.out.println(); } } }

ผศ . พิ�เชษฐ์� ศ�ร์�ร์�ตนไพิศาลกุ�ล57

Page 58: อาร์เรย์  (Array)

กุาร์ใช�อาร์�เร์ย์�สองมิ�ต�ที่!%แต&ละแถวมิ!ข้�อมิ�ลไมิ&เที่&ากุ�น

ผลล�พื้ธ์ ท��ได้�เป-นด้�งน�� 000. 000. 000. 000. 000. 000. 000. 000. 000. 000.

ผศ . พิ�เชษฐ์� ศ�ร์�ร์�ตนไพิศาลกุ�ล58

Page 59: อาร์เรย์  (Array)

ใช�อาร์�เร์ย์� 2 มิ�ต�เพิ"%อคั(านวณหา คั&าส�งส�ด คั&าต(%าส�ด และคั&าเฉล!%ย์

import java.util.Scanner;class array18 { public static void main(String[] args) { Scanner input = new

Scanner(System.in); int [][]num = new int[2][3]; double average; int max, min, sum = 0; int count = 0;

ผศ . พิ�เชษฐ์� ศ�ร์�ร์�ตนไพิศาลกุ�ล59

Page 60: อาร์เรย์  (Array)

ใช�อาร์�เร์ย์� 2 มิ�ต�เพิ"%อคั(านวณหา คั&าส�งส�ด คั&าต(%าส�ด และคั&าเฉล!%ย์

for(int i = 0; i < num.length; i++) { for(int j = 0; j < num[i].length; j++) { System.out.printf("Input

num[%d][%d]:",i,j); num[i][j] = input.nextInt(); } }

ผศ . พิ�เชษฐ์� ศ�ร์�ร์�ตนไพิศาลกุ�ล60

Page 61: อาร์เรย์  (Array)

ใช�อาร์�เร์ย์� 2 มิ�ต�เพิ"%อคั(านวณหา คั&าส�งส�ด คั&าต(%าส�ด และคั&าเฉล!%ย์

max = num[0][0]; min = num[0][0]; for(int i = 0; i < num.length; i++) { for(int j = 0; j < num[i].length; j++) { if(num[i][j] > max) max = num[i][j]; if(num[i][j] < min) min = num[i][j]; sum += num[i][j]; count++;

} }

ผศ . พิ�เชษฐ์� ศ�ร์�ร์�ตนไพิศาลกุ�ล61

Page 62: อาร์เรย์  (Array)

ใช�อาร์�เร์ย์� 2 มิ�ต�เพิ"%อคั(านวณหา คั&าส�งส�ด คั&าต(%าส�ด และคั&าเฉล!%ย์

average = (double)sum / count; System.out.printf("Maximum score is %d%n" ,

max); System.out.printf("Minimun score is %d%n" , min); System.out.printf("Average score is %.2f%n" ,

average); } }

ผศ . พิ�เชษฐ์� ศ�ร์�ร์�ตนไพิศาลกุ�ล62

Page 63: อาร์เรย์  (Array)

ใช�อาร์�เร์ย์� 2 มิ�ต�เพิ"%อคั(านวณหา คั&าส�งส�ด คั&าต(%าส�ด และคั&าเฉล!%ย์

ผลล�พื้ธ์ ท��ได้�ค�อ Input num[0 0 1][ ]: Input num[0 1 2][ ]: Input num[0 2 3][ ]: Input num[1 0 4][ ]: Input num[1 1 5][ ]: Input num[1 2 6][ ]: Maximum score is 6 Minimum score is 1 Average score is 350

ผศ . พิ�เชษฐ์� ศ�ร์�ร์�ตนไพิศาลกุ�ล63

Page 64: อาร์เรย์  (Array)

กุาร์ใช�อาร์�เร์ย์� 2 มิ�ต�เพิ"%อร์�บข้�อมิ�ลที่!%เป1นตาร์าง

ตั�วอย�างตั�อไปน��เป-นตั�วอย�างการืใช่�อารื เรืย 2 ม"ตั"เพื้��อรื�บ ข�อม)ลจ�านวนน�กศ1กษา 4 ช่��นป9 ของมหาว"ทยาล�ยแห�งหน1�ง

โด้ยสมมตั"ให�ม�คณะท��งหมด้ 3 คณะค�อ บรื"หารืธ์0รืก"จ ว"ทยาศาสตัรื และศ"ลปศาสตัรื ด้�งตัารืางตั�อไปน��

ผศ . พิ�เชษฐ์� ศ�ร์�ร์�ตนไพิศาลกุ�ล64

คัณะ ป2 1 ป2 2 ป2 3 ป2 4 ร์วมิ

บร์�หาร์ธุ�ร์กุ�จั

100 80 60 40 …

ว�ที่ย์าศาสตร์�

80 70 60 50 …

ศ�ลปศาสตร์�

50 40 30 20 …

ร์วมิ … … … … …

Page 65: อาร์เรย์  (Array)

กุาร์ใช�อาร์�เร์ย์� 2 มิ�ต�เพิ"%อร์�บข้�อมิ�ลที่!%เป1นตาร์าง

ให�ท�าการืเข�ยนโปรืแกรืมเพื้��อหาจ�านวนรืวมของแตั�ละคณะ จ�านวนรืวมแตั�ละช่��นป9 และจ�านวนน�กศ1กษาท��งหมด้ของ

มหาว"ทยาล�ยแห�งน�� แสด้งผลล�พื้ธ์ ในรื)ปแบบตัารืางโด้ยม� ผลล�พื้ธ์ ท��ได้�จากการืค�านวณปรืะกอบในตัารืางด้�วย (การื

รื�บข�อม)ลและการืแสด้งผลล�พื้ธ์ ออกทางจอภาพื้ให�ท�าเฉพื้าะตั�วเลขเท�าน��นไม�ตั�องรื�บข�อความและแสด้งข�อความออก

ทางจอภาพื้)

ผศ . พิ�เชษฐ์� ศ�ร์�ร์�ตนไพิศาลกุ�ล65

Page 66: อาร์เรย์  (Array)

กุาร์ใช�อาร์�เร์ย์� 2 มิ�ต�เพิ"%อร์�บข้�อมิ�ลที่!%เป1นตาร์าง

import java.util.Scanner;class array19 { public static void main(String[] args) { Scanner input = new

Scanner(System.in); int [][]stu = new int[3][4]; int []sumRow = new int[3]; int []sumCol = new int[4]; int sumTotal=0;

ผศ . พิ�เชษฐ์� ศ�ร์�ร์�ตนไพิศาลกุ�ล66

Page 67: อาร์เรย์  (Array)

กุาร์ใช�อาร์�เร์ย์� 2 มิ�ต�เพิ"%อร์�บข้�อมิ�ลที่!%เป1นตาร์าง

for(int i = 0; i < 3; i++) { for(int j = 0; j < 4; j++) { System.out.printf("Input

student[%d][%d]:",i,j); stu[i][j] = input.nextInt(); //รื�บข�อม)ล }}

ผศ . พิ�เชษฐ์� ศ�ร์�ร์�ตนไพิศาลกุ�ล67

Page 68: อาร์เรย์  (Array)

กุาร์ใช�อาร์�เร์ย์� 2 มิ�ต�เพิ"%อร์�บข้�อมิ�ลที่!%เป1นตาร์าง

// หาจ�านวนน�กศ1กษาแตั�ละคณะ (sumRow) for(int i = 0; i < 3; i++) { for(int j = 0; j < 4; j++) { sumRow[i] += stu[i][j]; } } //หาจ�านวนน�กศ1กษาแตั�ละช่��นป9 (sumCol) และจ�านวนน�กศ1กษาท��งหมด้ (sumTotal) for(int j = 0; j < 4; j++) { for(int i = 0; i < 3; i++) { sumCol[j] += stu[i][j]; //หาจ�านวนน�กศ1กษาแตั�ละช่��นป9

(sumCol) } sumTotal += sumCol[j]; // หาจ�านวนน�กศ1กษาท��งหมด้ (sumTotal) }

ผศ . พิ�เชษฐ์� ศ�ร์�ร์�ตนไพิศาลกุ�ล68

Page 69: อาร์เรย์  (Array)

กุาร์ใช�อาร์�เร์ย์� 2 มิ�ต�เพิ"%อร์�บข้�อมิ�ลที่!%เป1นตาร์าง

//แสด้งผลล�พื้ธ์ ออกทางจอภาพื้ for(int i = 0; i < 3; i++) { for(int j = 0; j < 4; j++) { System.out.printf("%5d",stu[i][j]); //แสด้ง

จ�านวนน�กศ1กษา }

System.out.printf("%5d",sumRow[i]); //แสด้งจ�านวนน�กศ1กษาแตั�ละคณะ

System.out.printf("%n"); }

ผศ . พิ�เชษฐ์� ศ�ร์�ร์�ตนไพิศาลกุ�ล69

Page 70: อาร์เรย์  (Array)

กุาร์ใช�อาร์�เร์ย์� 2 มิ�ต�เพิ"%อร์�บข้�อมิ�ลที่!%เป1นตาร์าง

for(int j = 0; j < 4; j++) {

System.out.printf("%5d",sumCol[j]); //แสด้งจ�านวนน�กศ1กษาแตั�ละช่��นป9

} System.out.printf("%5d",sumTotal); //แสด้ง

จ�านวนน�กศ1กษาท��งหมด้ } }

ผศ . พิ�เชษฐ์� ศ�ร์�ร์�ตนไพิศาลกุ�ล70

Page 71: อาร์เรย์  (Array)

กุาร์ใช�อาร์�เร์ย์� 2 มิ�ต�เพิ"%อร์�บข้�อมิ�ลที่!%เป1นตาร์าง

ผลล�พื้ธ์ ท��ได้�ม�ด้�งน�� Input student[0 0 100][ ]: Input student[0180 Input student[0 2 60][ ]: Input student[0 3 40][ ]: Input student[1 0 80][ ]: Input student[1170 Input student[1 2 60][ ]: Input student[1350 Input student[2 0 50][ ]: Input student[2 1 40][ ]: Input student[2 2 30][ ]: Input student[2 3 20][ ]: 100 80 60 40 280

80 70 60 50 260

50 40 30 20 140

230 190 150 110 680

ผศ . พิ�เชษฐ์� ศ�ร์�ร์�ตนไพิศาลกุ�ล71

Page 72: อาร์เรย์  (Array)

แบบฝึ5กุห�ด

จงเข�ยนโปรืแกรืมท��รื �บข�อม)ลจ�านวนเตั'มเข�าทางค�ย บอรื ด้ท��งหมด้ 8 ตั�ว เก'บไว�ในอารื เรืย 1 ม"ตั" เพื้��อท�าการืหาค�า

ส)งส0ด้เลขค�� ค�าตั��าส0ด้เลขค�� ค�าส)งส0ด้เลขค)� ค�าตั��าส0ด้เลขค)� แล�วให�แสด้งผลล�พื้ธ์ ท��ง 4 ออกทางจอภาพื้

  จงเข�ยนโปรืแกรืมท��ท�าหน�าท��ส0�มตั�วเลขตั��งแตั� 1 ถ1ง 100 ท��งหมด้ 100 ตั�ว เก'บไว�ในอารื เรืย แล�วให�แสด้งผลล�พื้ธ์ ท��

ได้�จากการืส0�มท��งหมด้ออกบนจอภาพื้โด้ยก�าหนด้ให�แสด้ง ข�อม)ลเป-น4 แถว ๆ ละ 2 5 ตั�ว

ผศ . พิ�เชษฐ์� ศ�ร์�ร์�ตนไพิศาลกุ�ล72

Page 73: อาร์เรย์  (Array)

แบบฝึ5กุห�ด

จงเข�ยนโปรืแกรืมท��ท�าหน�าท��สรื�างอารื เรืย 2 ม"ตั"ขนาด้2 x 2 จ�านวน3 ตั�วเพื้��อรื�บข�อม)ลเป-นเลขจ�านวนเตั'มเข�าทางค�ย บอรื ด้

หล�งจากน��นให�น�าอารื เรืย 2 ตั�วแรืกมาบวกก�น (Matrix addition) โด้ยเก'บผลล�พื้ธ์ ท��งหมด้ท��ได้�ไว�ในอารื เรืย ตั�วท��สามแสด้งค�าท��อย)�ในอารื เรืย ท��งสามออกบนจอภาพื้

  จงเข�ยนโปรืแกรืมเพื้��อท�าหน�าท��รื �บข�อม)ลยอด้ขายของส"นค�า2 ช่น"ด้ ในรือบ3 เด้�อน เพื้��อค�านวณหาจ�านวนยอด้ขายแตั�ละช่น"ด้

จ�านวนยอด้ขายในแตั�ละเด้�อน และจ�านวนยอด้ขายท��งหมด้ แสด้งผลล�พื้ธ์ ท��ได้�ออกทางจอภาพื้ สมมตั"ข�อม)ลเป-นด้�งน�� (การื

รื�บข�อม)ลและการืแสด้งผลล�พื้ธ์ ออกทางจอภาพื้ให�ท�าเฉพื้าะตั�วเลขเท�าน��นไม�ตั�องรื�บข�อความและแสด้งข�อความออกทางจอภาพื้)

ผศ . พิ�เชษฐ์� ศ�ร์�ร์�ตนไพิศาลกุ�ล73

Page 74: อาร์เรย์  (Array)

แบบฝึ5กุห�ด

ส�นคั�า เด"อนที่!% 1

เด"อนที่!% 2

เด"อนที่!% 3

ร์วมิ

A 100 200 150 …

B 50 100 200 …

ร์วมิ … … … …

ผศ . พิ�เชษฐ์� ศ�ร์�ร์�ตนไพิศาลกุ�ล74

Page 75: อาร์เรย์  (Array)

ผศ . พิ�เชษฐ์� ศ�ร์�ร์�ตนไพิศาลกุ�ล