บทที่ 6. อาเรย -...

76
บทที่ 6. อาเรย (Array and Array list) ÍÒ¨Òà¹Ñ°¾§È Ê‹§à¹ÕÂÁ http://www.siam2dev.com [email protected] [email protected] Last updated : 09-02-2561

Upload: others

Post on 14-Sep-2019

1 views

Category:

Documents


0 download

TRANSCRIPT

บทท 6. อาเรย(Array and Array list)

ÍÒ¨ÒÃÂ� ¹Ñ°¾§È� Ê‹§à¹ÕÂÁ

http://www.siam2dev.com

[email protected]

[email protected]

Last updated : 09-02-2561

อารเรย (Array) เปนตวแปรชดใหสาหรบเกบขอมลทมความสมพนธกน โดยจะเกบไวในชอเดยวกน

สมาชกแตละตวของ Array จะเรยกวา Element หรอ Cell ตวเลขทใชระบตาแหนงสมาชกของ Array เรยกวา Index หรอ Subscript

X[0] X[1] X[2] X[3] X[4]

ตวอยาง Array X ทม 5 Elementซงจะเรมตนตงแต Index 0 ถง 4

5 8 9 7 3

10/02/61เขยนโปรแกรม Java เบองตน 3

ตวแปรเปรยบเหมอนกลอง◦ int score = 30;

อารเรย คอแถวของตวแปรชนดเดยวกน เปรยบไดกบการนากลองหลายๆใบมาวางเรยงกนเปนแถว ◦ int[] scores = { 30, 50, 85, 10, 45 };

10/02/61เขยนโปรแกรม Java เบองตน 4

อารเรยของชนดขอมลพนฐาน

อารเรยของเรฟเฟอรเรนซ

10/02/61เขยนโปรแกรม Java เบองตน 5

การประกาศตวแปรอารเรย มรปแบบ คอ◦ ชนดขอมล[] ชอตวแปร = { คาเรมตน1, คาเรมตน2, ... };

ตวอยาง◦ int[] scores = {30, 50, 85};

X[0] X[1] X[2] X[3] X[4]

อาเรย 1 มต

X[1][0] X[1][1] X[1][2] X[1][3] X[1][4]

X[0][0] X[0][1] X[0][2] X[0][3] X[0][4]

อาเรย 2 มต

การเขาถงสมาชก Array ทาไดโดยการระบชอ Array และตามดวยเครองหมาย Square brackets [ ] และตวเลขระบ Index เชน

X[2]; อางถง Element ท 2 มคาเทากบ 9X[2]+X[3] นา Element ท 2 บวกกบ Element ท 3 จะได 9 + 7

เทากบ 16X[1+3] อางถง Element ท 4 มคาเทากบ 3X[0] = 5 กาหนดคา 5 ใหกบ Element ท 0X[3] = X[1] + X[2] นา Element ท 1 บวกกบ Element ท 2

แลวเกบผลลพธไวท Element ท 3

X[0] X[1] X[2] X[3] X[4]

5 8 9 7 3

การประกาศอารเรย 1 มต มรปแบบดงน

Type [] var_name;var_name = new type[size];

เชน

int []salary;salary = new int[6];

salary

salary[0]

salary[1]

salary[2]

salary[3]

salary[4]

salary[5]

int

int []salary = new int[6];

หรอ

หรอ

int salary[] = new int[6];

สามารถประกาศตวแปร Array พรอมกบกาหนดคาเรมตนใหกบสมาชก Array ไดโดยมรปแบบดงน

Type [] var_name = {value1,value2,value3};

int []num = {5,6,9};String []name = {“noom”,”boby”,”goft”};Int []unit = {1}

เชน

เมอประกาศอารเรย และจองหนวยความจาแลว การเรยกใชสมาชกจะใช index ซงมคาตงแต 0 ไปจนถง size – 1 เชนถาประกาศอารเรย int []salary = new int[6];salary[-1] จะอางถงไมได salary[6] จะอางถงไมได

อารเรยม Attribute length เพอใชเกบความยาวของอารเรย เชนsalary.length จะมคาเปน 6

10/02/61เขยนโปรแกรม Java เบองตน 12

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

int[] scores = { 30, 50, 85, 10, 45 };scores[5] = 10;

}}

testoutofbound

import java.util.Scanner;

public class ArrayDemo1 {

public static void main(String[] args)

{final int EMPLOYEES = 3; //กาหนดคาคงทวามพนกงาน 3 คน

int[] hours = new int[EMPLOYEES]; //ประกาศตวแปรอารเรยเกบชวโมงทางาน 3 เซล

Scanner keyboard = new Scanner(System.in); //สรางออบเจกตรบขอมลทางแปนพมพ

System.out.println("Enter the hours worked by " +

EMPLOYEES + " employees.");for (int index = 0; index < EMPLOYEES; index++)//วนลปรบขอมลไปเกบในเซล

{

System.out.print("Employee " + (index + 1) + ": ");

hours[index] = keyboard.nextInt();//รบขอมลทางแปนพมพไปเกบในอารเรย

}

System.out.println("The hours you entered are:");//แสดงชวโมงการทางาน

for (int index = 0; index < EMPLOYEES; index++)//วนลปแสดงขอมลแตละเซลของอารเรย

System.out.println(hours[index]);

}}

10/02/61เขยนโปรแกรม Java เบองตน 27

หรอint[] sc= {12,3,43,27,56};

int[] sc;sc = new int[5];

12 3 43 27 56

การประกาศอารเรยหลายตวทาไดดงนint [] abc , xyz;abc = new int[500];xyz = new int[10];

หรอเขยนรวมกนไดดงนint[] abc = new int[500], xyz = new int[10];

ขอควรระวงint [] a , b ; a และ b เปน Arrayint a[], b ; a เปน Array b ไมเปน Array

int [] a , b;a = new int[5];b = new int[3];a = b ;

a

a[0]

a[1]

a[2]

a[3]

a[4]

b

b[0]

b[1]

b[2]

ใน Java เวอรชนใหม มคาสง for แบบใหมสาหรบใชกบ Array เรยกวา enhanced for loop โดยมรปแบบดงน

for(type variable : array)statement;

int [] number = {3,6,9}for(int val : number)System.out.println(val);

เชน

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

final int LIMIT = 15, MULTIPLE = 10;//ประกาศคาคงทสาหรบใชงานint[] list = new int[LIMIT];//จองอารเรยชอ list จานวน 15 เซลfor(int index = 0; index < LIMIT; index++) //วนลป 15 ครงlist[index] = index*MULTIPLE;//นาคาอนเดกซมาคณกบ 10 แลวเกบในเซล

list[5] = 999; //เปลยนเซลทหกเปน 999

for(int value : list) //วนลปแสดงผลขอมลในอารเรยชอ listSystem.out.print(value+" ");

} }

การสง Array เขาไปใน Method จะเปนการสงตาแหนงของ Array ( Reference ) เขาไปใหกบ Parameter ของ Method

b

b[0]

b[1]

b[2]

showArray(b);

public void showArray(int [] array){for(int i=0;i<array.length;i++)

System.out.print(array[i]+” ”); }

array

10/02/61เขยนโปรแกรม Java เบองตน 33

String[] test = new String[3];

test[0] = "Hello"; test[1] = "Java"; test[2] = "World";

10/02/61เขยนโปรแกรม Java เบองตน 34

String[] test = { "Hello", "Java", "World"};

StringBuffer[] sb = { new StringBuffer("Hello"),new StringBuffer("Java"),new StringBuffer("World") };

อารเรยสามารถเกบ reference ของ Object ได โดยกาหนดใหอาเรย เปน Class นน ๆ ในตอนประกาศอาเรย มรปแบบดงน

เชน Student [] studentList = new Student[10];

className [] arrayName = new className[size];

Student [] studentList = new Student[3];studentList[0] = new Student();studentList[1] = new Student();studentList[2] = new Student();

studentList

studentList[0]

studentList[1]

studentList[2]

Student Object

Student Object

Student Object

5

57 45 47

45 47 4145

X[3][4]

01234

0 1 2 3 4

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

}

}

public class Student {private String name;private double gpa;public Student(){

name = null;gpa = 0.0;

}public Student(String n,double g){

name = n;gpa = g;

}public void setName(String n){name = n;}public void setGpa(double g){gpa = g;}public String getName(){return name;}public double getGpa(){return gpa;}public String toString(){

return "Name: "+name+" GPA: "+gpa;}}

Class Student

public class StudentDemo {public static void main(String [] args){Student[] studentList = new Student[3];studentList[0] = new Student("Somsri",2.5);studentList[1] = new Student("Winai",3.5);studentList[2] = new Student("Manee",3.75);

for(Student val:studentList)System.out.println(val);

}}

Class StudentDemo

ในภาษา Java มกลมคลาสทเรยกวา คอลเลกชน(Collection) ซงออบเจกตจากคลาสนสามารถใชสะสมออบเจกตตาง ๆ ไวได เชน Class ArrayList ดกวา Array ทสามารถเพมสมาชกได โดยไมตองประกาศไวลวงหนา การใช Class ArrayList จะตอง import java.util.ArrayListตวอยางการสรางออบเจกต จาก Class ArrayList

ArrayList nameList = new ArrayList();

add(int index,Object obj)ใชใสออบเจกตลงในอารเรยทตาแหนง index

remove(int index)นาออบเจกตตาแหนง index ออกจากอารเรย

get(int index)คนคาออบเจกตในตาแหนง index

indexof(Object obj)คนคา index ของออบเจกตทระบ

sizeสาหรบหาขนาดของ ArrayList

import java.util.ArrayList; //เรยกใชคลาส ArrayListpublic class Beatles {

public static void main(String[] args){

ArrayList band = new ArrayList(); //สรางออบเจกตเปนอารเรยชอ bandband.add("Pom"); //ใสคาวา Pom ลงใน bandband.add("Pet"); //ใสคาวา Pet ลงใน bandband.add("Jo"); //ใสคาวา Jo ลงใน bandband.add("Goft"); //ใสคาวา Goft ลงใน bandSystem.out.println(band); //แสดงขอมลใน band ออกมาทงหมดint location = band.indexOf("Pet"); //หาตาแหนงของ Petband.remove(location); //ลบคาวา Pete ออกไปSystem.out.println(band); //แสดงขอมลใน band ทงหมดSystem.out.println("At index 1: "+band.get(1)); //อานขอมลตาแหนงทสองband.add(2,"Rose"); //เพม Rose ลงไปในตาแหนงทสามSystem.out.println(band); //แสดงคาใน band ทงหมดSystem.out.println("Size of the band: "+band.size()); //แสดงขนาดของ

อารเรย}

}

10/02/61เขยนโปรแกรม Java เบองตน 48

10/02/61เขยนโปรแกรม Java เบองตน 49

sort() ใชเพอเรยงลาดบขอมลในอารเรย

binarySearch() ใชคนหาขอมลในอารเรย

◦ ผลของการคนหาคออนเดกซ(ตาแหนง)ในอารเรย

◦ กอนทจะคนหาเราตองเรยงลาดบขอมลเสยกอน

10/02/61เขยนโปรแกรม Java เบองตน 50

java.util.Arrays.sort(score);

10/02/61เขยนโปรแกรม Java เบองตน 51

int[] score={45,5,87,13,24};

Arrays.sort(score);

หรอ

int[] score={45,5,87,13,24};

java.util.Arrays.sort(score);

10/02/61เขยนโปรแกรม Java เบองตน 52

{"Jamies", "Amy", "Leo", "James"}

import java.util.Arrays;...Arrays.sort(names);

{"Amy", "James", "Jamies", "Leo"}

10/02/61เขยนโปรแกรม Java เบองตน 53

import java.util.Arrays;

public class SortString {

public static void main(String[] args) {String[] names = { "Jamies", "Amy", "Leo", "James" };

Arrays.sort(names);

System.out.println(Arrays.asList(names));}

}

พมพชอทงหมดในอารเรย

Import คลาสอารเรยเขามาใช

10/02/61เขยนโปรแกรม Java เบองตน 54

Arrays.sort(names);

วตถในคลาส String ไมรจกวธการ

เปรยบเทยบคาในภาษาไทย ??!?

10/02/61เขยนโปรแกรม Java เบองตน 55

String[] names = { "อร", "เปด", "กนก", "ปอบ", "ไก" };

java.text.Collator myCollator = java.text.Collator.getInstance();

Arrays.sort(names, myCollator);

System.out.println(Arrays.asList(names));

[กนก, ไก, ปอบ, เปด, อร]

สรางวตถทรจกการเรยงคาใน

ภาษาไทย

10/02/61เขยนโปรแกรม Java เบองตน 56

เมธอด binarySearch( ) ◦ ถาพบ จะสงตาแหนงทพบกลบมาให

◦ ถาไมพบ จะสงคาตดลบมาให

10/02/61เขยนโปรแกรม Java เบองตน 57

int[] id = {51, 3, 81, 20, 14};Arrays.sort(id);

int index = Arrays.binarySearch(id, 51);

System.out.println(index);

10/02/61เขยนโปรแกรม Java เบองตน 58

10/02/61เขยนโปรแกรม Java เบองตน 59

ลกษณะเปนตาราง

10/02/61เขยนโปรแกรม Java เบองตน 60

รปแบบ

◦ ชนดขอมล[][] ตวแปร = { อารเรยแถวแรก, อารเรยแถวทสอง, ... };

ตวอยาง

int[][] table = { { 1, 2, 3, 4},{ 5, 6, 7, 8}, { 9, 10, 11, 12}};

10/02/61เขยนโปรแกรม Java เบองตน 61

ใชอนเดกซ 2 ตว

รปแบบ

◦ อารเรย[แถว][คอลมน]

ตวอยาง

◦ table[1][2]

10/02/61เขยนโปรแกรม Java เบองตน 62

10/02/61เขยนโปรแกรม Java เบองตน 63

ประกาศ

◦ int[][] table; จองพนท

◦ table = new int[3][4]; อางถง

◦ table[0][0] = 3;◦ table[0][1] = 5;◦ table[0][2] = 8;◦ table[0][3] = 7;

10/02/61เขยนโปรแกรม Java เบองตน 64

10/02/61เขยนโปรแกรม Java เบองตน 65

int[][] twoD = { { 1, 2, 3},{ 4, 5, 6, 7}, { 8, 9, 10, 11, 12}};

System.out.println(twoD[1][2]);

10/02/61เขยนโปรแกรม Java เบองตน 66

10/02/61เขยนโปรแกรม Java เบองตน 67

10/02/61เขยนโปรแกรม Java เบองตน 68

ใชอนเดกซ 3 ตว

รปแบบ

◦ อารเรย[แผน][แถว][คอลมน]

10/02/61เขยนโปรแกรม Java เบองตน 69

int[][][] array = {

{

{3,5,8,7},

{1,2,6,4},

{8,4,1,2}

},

{

{1,5,8,4},

{5,6,2,3},

{8,7,5,0}

},

{

{7,8,3,4},

{2,1,9,2},

{8,4,5,6}

}

};

System.out.println(array[1][2][3]);

อยตาแหนงใดในอารเรย

10/02/61เขยนโปรแกรม Java เบองตน 70

10/02/61เขยนโปรแกรม Java เบองตน 71

อารเรยใชเกบขอมลทมชนดเดยวกน ซงอาจจะเปนเรฟเฟอรเรนซหรอขอมลชนด

พนฐานได

อารเรยเปนวตถชนดหนง

อารเรยหนงมตคอแถวตวแปรชนดเดยวกน ตวแปรดงกลาวอาจจะเปนวตถ หรอเปน

ขอมลชนดพนฐานกได

◦ ขนาดของอารเรยคอ length

◦ สมาชกตวแรกในอารเรยมอนเดกซคอ 0

◦ สมาชกตวสดทายคอตวทมอนเดกซเทากบ length – 1

10/02/61เขยนโปรแกรม Java เบองตน 72

อารเรยสองมตโดยทวไปจะมลกษณะเปนตารางของตวแปร

◦ การอางถงตวแปรจะเรมตนจากหมายเลขแถวกอน แลวตามดวย

หมายเลขคอลมน

อารเรยสามมตคออารเรยสองมตวางซอนกน

เราสามารถสรางอารเรยใหมมตทสงขนไปอกได แตเราแทบจะไมม

โอกาสไดใชอารเรยทมมตสงกวาสองมต

10/02/61เขยนโปรแกรม Java เบองตน 73

คลาส java.util.Arrays มเมธอดทชวยในการประมวลผลอารเรย เชน การ

เรยงลาดบขอมล และการคนหา

◦ การเรยงลาดบขอมลใชเมธอด sort()

◦ การคนหาใชเมธอด binarySearch() กอนทจะคนหาตอง sort() กอน

10/02/61เขยนโปรแกรม Java เบองตน 74

1. สรางอารเรยเกบขอความขนาด 2 ตว โดยตาแหนงแรกให เกบชอ ตาแหนงทสองนามสกลของนกศกษา และแสดงคาอารเรยนน

2. เขยนโปรแกรมพมพคาในอารเรยตอไปน {10,20,30,40,50} 3. จากขอ 2 ใหแสดงคาในอารเรยจากขวาสดไปซายสด

10/02/61เขยนโปรแกรม Java เบองตน 75

จงเขยนคาสงเพอประกาศตวแปรอารเรย ตามคาอธบายในแตละขอตอไปน

1. ตวแปรอารเรย 1 มตชอ num เพอเกบจานวนเตม 12 จานวน และกาหนดใหมคาเรมตนดงนคอ 1,4,7,10,13,16,19,22,25,28,31,34

2. ตวแปรอารเรย 2 มตชอ x ขนาด 3x4 เพอเกบตวเลขทศนยม

3. ตวแปรอารเรย 1 มตชอ str เพอเกบขอความ uttaradit

4. ตวแปรอารเรยชอ account เพอเกบ ขอมลทงรายรบและรายจายประจาป โดยแจกแจงเปนเดอนตงแตเดอนท 1 ถงเดอนท 12

5. ตวแปรอารเรยชอ volumn เพอเกบขอมลยอดขายของพนกงานจานวน 20 คน โดยแจกแจงเปนไตรมาสท 1 ถงไตรมาสท 3

6. ตวแปรอารเรยชอ vowel เพอเกบตวอกษรทเปนสระ A,E,I,O,U

10/02/61เขยนโปรแกรม Java เบองตน 76

กาหนดอารเรยตอไปน

int[] num={ {1,2,3}, {4,5,6}, {7,8,9} } เลข 5 อยตาแหนงใดในอารเรย

เขยนโปรแกรมสาหรบเกบอายของผสมครสอบเขาเรยน โดยการกรอกอายผสมครทงหมด 5 คนเขามาเกบไวในอารเรย

เขยนโปรแกรมเรยงลาดบคาในอารเรย {20,10,40,50,30} จากนอยไปมาก

หาผลรวมของอารเรย {20,10,40,50,30}