อาร์เรย์ (Array)
การเก็บข้อมูลด้วยอาร์เรย์ ตัวแปรธรรมดา (Scalar) เก็บค่าได้เพียงค่าเดียว เช่น int x = 10; แต่มีตัวแปรบางประเภทเก็บค่าได้หลายค่าเช่น int [ ] y = new int [10] อาร์เรย์ (Array) คือ รูปแบบการเก็บข้อมูล ที่สามารถเก็บข้อมูลได้หลาย ค่า โดยใช้ตัวแปรเพียงตัวเดียว โดยที่ค่าต่างๆ เหล่านี้ มีชนิดข้อมูลแบบ เดียวกัน สมาชิก (Element) คือ ข้อมูลที่ถูกเก็บอยู่ภายในอาร์เรย์ คีย์ หรือ อินเด็กซ์ (Index) คือ ค่าที่ใช้ระบุตำแหน่งสมาชิกในอาร์เรย์ (เป็น integer เท่านั้น)
1. การประกาศตัวแปรชนิดอาร์เรย์ มีรูปแบบดังนี้ Type [ ] Array_name; โดยที่ Type คือ ชนิดข้อมูล (data type) ในอาร์เรย์ เช่น int, char, float, double Array_name คือ ชื่อของตัวแปรอาร์เรย์ เช่น int [ ] numbers; //ประกาศตัวแปรอาร์เรย์แต่ยังไม่รู้ว่าเก็บได้กี่ข้อมูล numbers = new int [6]; //จองพื้นที่ให้เก็บได้ 6 ข้อมูล หรือแบบรวมบรรทัดเดียว int [ ] numbers = new int [6]; หรือแบบรวมบรรทัดเดียว int numbers [ ] = new int [6];
1.1 การประกาศและกำหนดค่าข้อมูลชนิดอาร์เรย์ (ในแต่ละอินเด็กซ์) ตัวอย่าง : int [ ] score = new int [10];//ประกาศตัวแปรชื่อ score เพื่อเก็บข้อมูลคะแนน //นักศึกษา จำนวน 10 ข้อมูล โดยทั้ง 10 ข้อมูลมี //ชนิดเป็นจำนวนเต็ม score[0] = 20; //กำหนดค่าให้อาร์เรย์อินเด็กซ์ที่ 0 มีค่า 20 score[1] = 25; //กำหนดค่าให้อาร์เรย์อินเด็กซ์ที่ 1 มีค่า 25 score[2] = 15; //กำหนดค่าให้อาร์เรย์อินเด็กซ์ที่ 2 มีค่า 15 … score[9] = 26; //กำหนดค่าให้อาร์เรย์อินเด็กซ์ที่ 9 มีค่า 26
1.2 การประกาศและกำหนดค่าข้อมูลชนิดอาร์เรย์ (ทุกอินเด็กซ์พร้อมกัน) การกำหนดค่าของอาร์เรย์ทั้งหมดทุกอินเด็กซ์พร้อมกัน ทำได้ดังนี้ int [ ] score1 = { 20,25,30,26,24,18,17,25,24,22}; int score2 [ ]= { 20,25,30,26,24,18,17,25,24,22}; int score3 [ ]; score3 = {20,25,30}; การกำหนดค่าเริ่มต้นแบบนี้ใช้ได้เฉพาะตอนที่มีการประกาศตัวแปรอาร์เรย์พร้อมกันด้วย เท่านั้น!!
1.3 การประกาศและกำหนดค่าข้อมูลชนิดอาร์เรย์ (กำหนดค่าจากตัวแปร) การกำหนดค่าให้อาร์เรย์จากตัวแปร เช่น int [ ] score = new int[10]; int x = 20, y = 26; score[0] = x; score[9] = y;
2. การอ้างถึงสมาชิกและข้อมูลในอาร์เรย์ การอ้างถึงแต่ละสมาชิกของอาร์เรย์ เพื่อเข้าไปใช้งานค่า ทำได้โดยการเขียนชื่อของ อาร์เรย์และใส่อินเด็กซ์ของสมาชิกไว้ใน [ ] โดยอินเด็กซ์เริ่มตั้ง 0 ถึง n-1 (n คือ จำนวนสมาชิกของอาร์เรย์ทั้งหมด) เช่น System.out.print(score[9] + score[8]); score[4] = score[3]+ score[2]; System.out.print(score[4]); ถ้าอ้างถึงสมาชิกอาร์เรย์เกินขอบเขตจะเกิดอะไรขึ้น? เช่น score[10]
3. การรับข้อมูลทางคีย์บอร์ดเก็บไว้ในอาร์เรย์ สามารถใช้คำสั่งวนลูปเพื่อรับค่าคงที่เข้าไปเก็บไว้ในอาร์เรย์แต่ละสมาชิกโดยใช้ลูป for, while , do เช่น จงเขียนคำสั่งในการรับค่าเลขจำนวนเต็ม 10 จำนวนจากผู้ใช้แล้วเก็บไว้ในอาร์เรย์ int [ ] score = new int [10]; Scanner kb = new Scanner(System.in); for (int i=0 ; i<=9; i++) { System.out.print("Enter value for index:" +i + " > "); score[i] = kb.nextInt(); }
3. การรับข้อมูลทางคีย์บอร์ดเก็บไว้ในอาร์เรย์ (ต่อ) จงเขียนคำสั่งในการรับค่าเลขจำนวนเต็ม 10 จำนวนจากผู้ใช้แล้วเก็บไว้ในอาร์เรย์ แล้วหา ผลรวมของค่าทุกค่าที่ผู้ใช้กรอกเข้ามา แล้วแสดงผลลัพธ์ออกหน้าจอ int [ ] score = new int [10]; int total =0; Scanner kb = new Scanner(System.in); for (int i=0 ; i<score.length; i++) { System.out.print("Enter value for index:" +i + " > "); score[i] = kb.nextInt(); total = total + score[i]; } System.out.print("Total = " + total);
4. การแสดงผลข้อมูลอาร์เรย์ สามารถแสดงผลข้อมูลในอาร์เรย์แต่ละสมาชิกได้ โดยการอ้างชื่อและอินเด็กซ์ char [ ] words = {'h','e','l','l','o'}; System.out.println(words); System.out.println(words[0]); System.out.println(words[4]); สามารถใช้ลูป for , while ,do เพื่อแสดงผลข้อมูลในอาร์เรย์ทั้งหมดได้ เช่น int [ ] days = {31,28,31,30,31,30,31,31,30,31,30,31}; for (int i=0 ; i<days.length; i++) { System.out.println("Month " +(i+1)+" has " + days[i] + " days."); } คำถาม ถ้าปริ้น System.out.println(days); จะเกิดอะไรขึ้น
4. การแสดงผลข้อมูลอาร์เรย์ (ต่อ) อาร์เรย์ของสตริง ก็มีนะ! String [ ] months = {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"}; int [ ] days = {31,28,31,30,31,30,31,31,30,31,30,31}; for (int i=0; i< 12 ; i++) { System.out.println(months[i]+ " has " +days[i] + " days."); }
5. ตัวอย่าง โปรแกรมหาค่าอายุที่ต่ำที่สุดในอาร์เรย์ int [ ] age = {29, 20, 12, 60, 35}; int minAge = age[0]; for (int i=0; i< age.length ; i++) { System.out.println("Age data : " + age[i]); if (age[i] < minAge) { minAge = age[i]; } System.out.println("Minimum age is " + minAge);
แบบฝึกหัด ต่อมาวนลูปแสดงคะแนนสอบของแต่ละคน เขียนโปรแกรมเพื่อเก็บข้อมูลคะแนนสอบของนักศึกษา โดยกำหนดให้รับข้อมูล จำนวนนักศึกษาว่ามีกี่คน แล้ววนลูปรับคะแนนแต่ละคนผ่านทางคีย์บอร์ด ต่อมาวนลูปแสดงคะแนนสอบของแต่ละคน พร้อมแสดงข้อมูลผลรวมคะแนนสอบทั้งหมด (Total) และแสดงค่าเฉลี่ยคะแนนสอบ (Average) และแสดงคะแนนสอบสูงสุด ว่ามาจากนักศึกษาคนใด (Maximum)