บทที่ 6. อาเรย -...
TRANSCRIPT
บทท 6. อาเรย(Array and Array list)
ÍÒ¨ÒÃÂ� ¹Ñ°¾§È� Ê‹§à¹ÕÂÁ
http://www.siam2dev.com
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 เบองตน 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;
}}
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
ใน 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
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 เบองตน 49
sort() ใชเพอเรยงลาดบขอมลในอารเรย
binarySearch() ใชคนหาขอมลในอารเรย
◦ ผลของการคนหาคออนเดกซ(ตาแหนง)ในอารเรย
◦ กอนทจะคนหาเราตองเรยงลาดบขอมลเสยกอน
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 เบองตน 60
รปแบบ
◦ ชนดขอมล[][] ตวแปร = { อารเรยแถวแรก, อารเรยแถวทสอง, ... };
ตวอยาง
int[][] table = { { 1, 2, 3, 4},{ 5, 6, 7, 8}, { 9, 10, 11, 12}};
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 เบองตน 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 เบองตน 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 เบองตน 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