Top Banner
181 © สงวนลิขสิทธิพฤศจิกายน 2553 (ปรับปร ุงครั้งที7 ฉบับใช้ติวภาค 2/2553) เรียบเรียงโดย วงศ์ยศ เกิดศรี (แบงค์ ) Computer Programming using Java Advanced Classes and Objects - 13 CHAPTER 13 คลาสและอ๊อบเจ็คแบบซับซ้อน (Advanced Classes and Objects) 1. การรับค่าและคืนค่าประเภทข้อมลแบบ คลาส 1) เมท็อดและตัวสร้างที ่รับพารามิเตอร์เป็นอ๊อบเจ็ค (พารามิเตอร์ที ่มีประเภทข้อมลเป็นคลาส ) หมายเหตุ เรียกตัวสร้างแบบหมายเลข 1 ว่า ตัวสร้างเริ่มต้น (Default Constructor) เรียกตัวสร้างแบบหมายเลข 2 ว่า ตัวสร้างรายละเอียด (Detail Constructor) เรียกตัวสร้างแบบหมายเลข 3 ว่า ตัวสร้างคัดลอก (Copy Constructor) 2) เมท็อดและตัวสร้างที ่รับพารามิเตอร์ที ่มีชื ่อเหมือนกับแอตทริบิวของคลาส เมท็อด หรือตัวสร้าง ใดก็ตามที่รับค่าพารามิเตอร์ ที่มีชื่อเหมือนกับแอตทริบิวของคลาส นั ้น จะต้องใช้คีย์เวิร์ด this ระบุหน้าแอตทริบิว เพื่อไม่ให้เกิดความสับสนว่าค่าใดคือแอตทริบิว และค่าใดค่าพารามิเตอร์ ดังตัวอย่าง 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 public class Data { public int x; public Data() { x = 0; } public Data(int n) { x = n; } public Data(Data d) { x = d.x; } public boolean isEq1(int n) { return x == n; } public boolean isEq2(Data d) { return x == d.x; } } รับเข้ามาทั ้งก ้อนของอ๊อบเจ็ค d แต่จะสนใจเพียง แค่แอตทริบิว x ในอ๊อบเจ็ค d เท่านั้น โดยจะเอา ค่า x ที่อยู ่ในอ๊อบเจ็ค d หรือค่า d.x เข้าไปเก็บไว้ นแอตทริบิว x ของคลาสต้นแบบ Data n d x รับเพียงแค่ int หนึ่งค่าในชื่อ n เข้ามา ทางพารามิเตอร์ n d x รับทั้งก ้อนอ๊อบเจ็คชนิด Data หนึ่งก้อนใน ชื่อ d เข้ามาทางพารามิเตอร์ (แต่จะใช้งาน เพียงแค่ค่า x ของอ๊อบเจ็ค d เท่านั้น) 1 2 3 4 5 6 7 8 public class Data { public int x; ... public Data(int x) { x = x; //Error } ... } เกิดความสับสนขึ้น ว่า x ตัวใดคือแอตทริบิวและ x ตัวใดคือพารามิเตอร์ 1 2 3 4 5 6 7 8 public class Data { public int x; ... public Data(int x) { this.x = x; } ... } ในกรณีที่รับพารามิเตอร์ ที่มีชื่ออื่นที่ไม่ใช่ชื่อ x สามารถเขียนเป็น x = <พารามิเตอร์ > ได้ แต่ถ้าพารามิเตอร์มีชื่อเหมือนกับแอต- ทริบิว x จะต้องเปลี่ยนเป็น this.x = <พารามิเตอร์ > คีย์เวิร์ด this สามารถใช้ได้กับแอตทริบิว เท่านั้นไม่สามารถใช ้ได้กับพารามิเตอร์ 1 2 3
30

Java-Chapter 13 Advanced Classes and Objects

Dec 10, 2014

Download

Documents

Chapter 13 Advanced Classes and Objects
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Java-Chapter 13 Advanced Classes and Objects

181

© สงวนลขสทธ พฤศจกายน 2553 (ปรบปรงครงท 7 ฉบบใชตวภาค 2/2553) เรยบเรยงโดย วงศยศ เกดศร (แบงค)

Computer Programming using Java Advanced Classes and Objects - 13

CHAPTER 13

คลาสและออบเจคแบบซบซอน

(Advanced Classes and Objects)

1. การรบคาและคนคาประเภทขอมลแบบ คลาส

1) เมทอดและตวสรางทรบพารามเตอรเปนออบเจค (พารามเตอรทมประเภทขอมลเปนคลาส )

หมายเหต เรยกตวสรางแบบหมายเลข 1 วา ตวสรางเรมตน (Default Constructor)

เรยกตวสรางแบบหมายเลข 2 วา ตวสรางรายละเอยด (Detail Constructor)

เรยกตวสรางแบบหมายเลข 3 วา ตวสรางคดลอก (Copy Constructor)

2) เมทอดและตวสรางทรบพารามเตอรทมชอเหมอนกบแอตทรบวของคลาส เมทอดหรอตวสรางใดกตามทรบคาพารามเตอรทมชอเหมอนกบแอตทรบวของคลาสนน จะตองใชคยเวรด

this ระบหนาแอตทรบวเพอไมใหเกดความสบสนวาคาใดคอแอตทรบวและคาใดคาพารามเตอร ดงตวอยาง

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18

public class Data { public int x; public Data() { x = 0; } public Data(int n) { x = n; } public Data(Data d) { x = d.x; } public boolean isEq1(int n) { return x == n; } public boolean isEq2(Data d) { return x == d.x; }

}

รบเขามาทงกอนของออบเจค d แตจะสนใจเพยง

แคแอตทรบว x ในออบเจค d เทานน โดยจะเอา

คา x ทอยในออบเจค d หรอคา d.x เขาไปเกบไว

ในแอตทรบว x ของคลาสตนแบบ Data

n

d

x

รบเพยงแค int หนงคาในชอ n เขามา

ทางพารามเตอร

n

d

x

รบทงกอนออบเจคชนด Data หนงกอนใน

ชอ d เขามาทางพารามเตอร (แตจะใชงาน

เพยงแคคา x ของออบเจค d เทานน)

1 2 3 4 5 6 7 8

public class Data { public int x; ... public Data(int x) { x = x; //Error } ...

}

เกดความสบสนขน วา x ตวใดคอแอตทรบวและ

x ตวใดคอพารามเตอร

1 2 3 4 5 6 7 8

public class Data { public int x; ... public Data(int x) { this.x = x; } ...

}

ในกรณทรบพารามเตอรทมชออนทไมใชชอ x สามารถเขยนเปน

x = <พารามเตอร> ได แตถาพารามเตอรมชอเหมอนกบแอต-

ทรบว x จะตองเปลยนเปน this.x = <พารามเตอร>

คยเวรด this สามารถใชไดกบแอตทรบว

เทานนไมสามารถใชไดกบพารามเตอร

1

2

3

Page 2: Java-Chapter 13 Advanced Classes and Objects

182

© สงวนลขสทธ พฤศจกายน 2553 (ปรบปรงครงท 7 ฉบบใชตวภาค 2/2553) เรยบเรยงโดย วงศยศ เกดศร (แบงค)

Computer Programming using Java 13 - Advanced Classes and Objects

โจทยขอท 1 [ระดบปานกลาง] จงแสดงผลลพธในคลาส TestNum ทมการสรางและเรยกใชออบเจคจากคลาส Num ในรปแบบตางๆ พรอมทงเตมเตมสวนของเมทอดในคลาส Num ใหสมบรณ (16 คะแนน)

import java.util.Scanner; public class TestNum {

public static void main(String[] args) {

} //End of main

} //End of class

------------------------------------------------------------------------

public class Num { public int x; public int y; Num() { x = y = 0; }

Num(int x, int y) { this.x = x; this.y = y; }

Num(Num n) { this.x = n.x; this.y = n.y; } public boolean isEquals(int x, int y) { } public boolean isEquals(Num n) { }

} //End of class

Num n1 = new Num(); System.out.println(n1.x + "," + n1.y);

เรยกตวสรางใด (ระบหมายเลข)

ผลลพธทแสดง ขนบนจอภาพคอ

Num n2 = new Num(13, 2); System.out.println(n2.x + "," + n2.y);

Num n3 = new Num(n2); System.out.println(n3.x + "," + n3.y);

Num n4 = new Num(new Num(7, 11)); System.out.println(n4.x + "," + n4.y);

Num n5 = new Num(n4.y, n3.x); System.out.println(n5.x + "," + n5.y);

n2 = new Num(new Num()); System.out.println(n2.x + "," + n2.y);

1

2

3

Page 3: Java-Chapter 13 Advanced Classes and Objects

183

© สงวนลขสทธ พฤศจกายน 2553 (ปรบปรงครงท 7 ฉบบใชตวภาค 2/2553) เรยบเรยงโดย วงศยศ เกดศร (แบงค)

Computer Programming using Java Advanced Classes and Objects - 13

3) เมทอดทคนคาเปนออบเจค (มประเภทขอมลเปนคลาส )

โจทยขอท 2 [ระดบยาก] จงเขยนคลาส Coin ใหสมบรณ ซงเปนตวแทนของเหรยญใดๆ ทประกอบไปดวยมลคาของเหรยญ (Value) และหนาของเหรยญ (Side) ทเปนหว (H) หรอกอย (T) พรอมทงสรางคลาส DemoCoin เพอสรางและเรยกใชออบเจคจากคลาส Coin (20 คะแนน)

public class Coin {

//แอตทรบว side แบบ public เพอเกบหนาของเหรยญเชน หว "H" และ กอย "T" //แอตทรบว value แบบ public เพอเกบมลคาของเหรยญ เชน 1 บาท, 2 บาท, 5 บาท และ 10 บาท

//กาหนดใหแอตทรบว list เปนรายการของหนาทเปนไปไดทงหมดของเหรยญ private final String list[] = { "H", "T" };

//ตวสรางแบบไมมพารามเตอรเพอกาหนดใหหนาของเหรยญเปนหว (H) และมลคา ของเหรยญเปน 0

//ตวสรางแบบมพารามเตอรสองตวทเปนสตรงและจานวนเตมเพอกาหนดหนาและมลคา ของเหรยญ

//ตวสรางแบบมพารามเตอรหนงตวประเภท Coin เพอกาหนดหนาและมลคาของเหรยญ

1 2 3 4 5 6 7 8 9 10 11 12

public class Data { public int x; ... public int getX() { return x; } public Data getData() { Data d = new Data(x); return d; } ...

}

x

d

x

คนคาขอมลในรปของออบเจค d ซงเปรยบเสมอน

เปนการคนคาขอมล d.x ออกไป (คนออกทงกอน)

Page 4: Java-Chapter 13 Advanced Classes and Objects

184

© สงวนลขสทธ พฤศจกายน 2553 (ปรบปรงครงท 7 ฉบบใชตวภาค 2/2553) เรยบเรยงโดย วงศยศ เกดศร (แบงค)

Computer Programming using Java 13 - Advanced Classes and Objects

//เมทอด flip(…) เพอเปลยนหนาของเหรยญโดยการสม (ควรเรยกใชงานแอตทรบว list)

//เมทอด reverse(…) เพอกลบหนาของเหรยญจากหวเปนกอยหรอจากกอยเปนหว

//เมทอด equals(…) เพอรบเหรยญอกหนงเหรยญเขามาทางพารามเตอร แลวตรวจสอบวามหนา และมลคาของเหรยญนนเทากบเหรยญของคลาสนหรอไม

} //End of class

/* คลาส DemoCoin เพอสรางและเรยกใชงานคลาส Coin โดยใหสรางเหรยญ 4 เหรยญทประกอบไปดวยเหรยญ 1 บาทหนาหวจานวน 2 เหรยญ (ตองใชตวสรางคนละแบบกน) และเหรยญ 5 บาทหนากอยจานวน 2 เหรยญ (ตองใชตวสรางคนละแบบกน) พรอมสมหนาของเหรยญ 1 บาทเหรยญทหนงและกลบหนาเหรยญทสอง และสมหนาเหรยญ 5 บาทเหรยญทหนงและกลบหนาเหรยญทสอง โดยทา 20 ครง พรอมตรวจสอบวาเหรยญแตละคเทากนหรอไม แลวแสดงรายละเอยดนนขนบนจอภาพ */

Page 5: Java-Chapter 13 Advanced Classes and Objects

185

© สงวนลขสทธ พฤศจกายน 2553 (ปรบปรงครงท 7 ฉบบใชตวภาค 2/2553) เรยบเรยงโดย วงศยศ เกดศร (แบงค)

Computer Programming using Java Advanced Classes and Objects - 13

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

} //End of main } //End of class

โจทยขอท 3 [ระดบยาก] จงเขยนโปรแกรมจาวาเพอสรางคลาส SetOfInteger ทใชแทนเซตของตวเลขจานวนเตม โดยจะเกบไวในอาเรยทเรยงจากนอยไปหามากเสมอ และตวเลขในอาเรยตองไมซากนเลยโดยใหสรางเมทอด และแอตทรบวตามรายละเอยดทกาหนดให (30 คะแนน)

public class SetOfInteger {

//ประกาศแอตทรบวแบบ public ทเปนอาเรยประเภทจานวนเตมชอ iSet (ยงไมตองระบขนาด)

//กาหนดตวสรางแบบทรบพารามเตอร 1 ตวทเปนอาเรยชนดจานวนเตมเพอนามากาหนดคาเรมตนใหกบแอตทรบว iSet โดยจะตองมการจดเรยงจากนอยไปมากและกาจดสมาชกตวทซากนเสมอ ดตวอยาง { 7, 5, 3, 5, 3 } จะไดเปน { 3, 5, 7 } เปนตน (เรยกใชเมทอดทกาหนดไวให) public SetOfInteger(int[] x) {

} //End of constructor

Page 6: Java-Chapter 13 Advanced Classes and Objects

186

© สงวนลขสทธ พฤศจกายน 2553 (ปรบปรงครงท 7 ฉบบใชตวภาค 2/2553) เรยบเรยงโดย วงศยศ เกดศร (แบงค)

Computer Programming using Java 13 - Advanced Classes and Objects

//กาหนดตวสรางแบบทรบพารามเตอร 1 ตวทเปนชนด SetOfInteger เพอนามากาหนดคาเรมตนใหกบแอตทรบว iSet public SetOfInteger(SetOfInteger s) {

} //End of constructor

//กาหนดใหเมทอด sort(…) ใชจดเรยงขอมลแบบฟองจากนอยไปมาก

public int[] sort(int x[]) { for (int i = x.length - 1; i >= 1; i--) for (int j = 0; j <= i; j++) if (x[j] > x[j + 1]) { int temp = x[j]; x[j] = x[j + 1]; x[j + 1] = temp; } } } return x;

} //End of method

//กาหนดใหเมทอด removeDuplicatedMembers(…) ใชกาจดสมาชกตวทซากน

public int[] removeDuplicatedMembers(int x[]) { int t[] = new int[x.length]; int index = 0; for(int i = 0; i < x.length; i++) { if (i == 0) { t[index] = x[i]; index++; } else { int j; for (j = 0; j < index; j++) { if (t[j] == x[i]) break; } if (j == index) { t[index] = x[i]; index++; } } } int n[] = new int[index]; for (int i = 0; i < n.length; i++) n[i] = t[i]; return n; } //End of method

Page 7: Java-Chapter 13 Advanced Classes and Objects

187

© สงวนลขสทธ พฤศจกายน 2553 (ปรบปรงครงท 7 ฉบบใชตวภาค 2/2553) เรยบเรยงโดย วงศยศ เกดศร (แบงค)

Computer Programming using Java Advanced Classes and Objects - 13

//ใหเมทอด equals(…) ใชตรวจสอบวาแอตทรบว iSet ในคลาสน กบ iSet จากออบเจค x ทรบ เขามาทางพารามเตอรเทากนหรอไม public boolean equals(SetOfInteger x) {

} //End of method

//ใหเมทอด toString(…) ใชคนคาสมาชกทกตวในแอตทรบว iSet ในรปแบบของสตรง public String toString() {

} //End of method

//ใหเมทอด addElement(…) ใชเพมจานวนเตมใดๆ หนงคาเขาไปในแอตทรบว iSet โดยจะตองขยายขนาดของแอตทรบว iSet และจดเรยงและกาจดกบสมาชกตวทซาใหมอกครงหนง public void addElement(int a) {

} //End of method

Page 8: Java-Chapter 13 Advanced Classes and Objects

188

© สงวนลขสทธ พฤศจกายน 2553 (ปรบปรงครงท 7 ฉบบใชตวภาค 2/2553) เรยบเรยงโดย วงศยศ เกดศร (แบงค)

Computer Programming using Java 13 - Advanced Classes and Objects

//ใหเมทอด findElement(…) ใชคนหาตาแหนงของตวเลขคาใดคาหนงในแอตทรบว iSet โดยถาคนเจอใหคนคาตาแหนงทเจอ ถาไมเชนนนใหคนคา -1 public int findElement(int a) {

} //End of method

//ใหเมทอด isSubset(…) ใชตรวจสอบวาคา iSet ในออบเจค s เปนสบเซต (Subset) ของแอตทร-บว iSet ในคลาสนหรอไม public boolean isSubset(SetOfInteger s) {

} //End of method

//ใหเมทอด union(…) ใชคานวณหาเซตทเกดจากการนาเอา iSet ในคลาสนกบ iSet ทรบเขามาทางพารามเตอรมายเนยนกน (Union) แลวคนคาคาตอบชนด SetOfInteger

public SetOfInteger union(SetOfInteger s) {

} //End of method

Page 9: Java-Chapter 13 Advanced Classes and Objects

189

© สงวนลขสทธ พฤศจกายน 2553 (ปรบปรงครงท 7 ฉบบใชตวภาค 2/2553) เรยบเรยงโดย วงศยศ เกดศร (แบงค)

Computer Programming using Java Advanced Classes and Objects - 13

//ใหเมทอด intersect(…) ใชคานวณหาเซตทเกดจากการนาเอา iSet ในคลาสนกบ iSet ทรบเขามาทางพารามเตอรมาอนเตอรเซคกน (Intersection) แลวคนคาคาตอบชนด SetOfInteger

public SetOfInteger intersect(SetOfInteger s) {

} //End of method } //End of class

2. การประกาศและสรางอาเรยของออบเจค

1) วธการประกาศและสรางอาเรยของออบเจค ทาแบบเดยวกบการประกาศและสรางอาเรยแบบทวไป ซงมรายละเอยดดงน (1) การประกาศและสรางอาเรยของออบเจคแบบ 1 มต

(2) การประกาศและสรางอาเรยของออบเจคแบบ 2 มต

ตวอยางการประกาศและสรางออบเจคแบบทวไป (โดยอางองคลาส Data จากหนาแรก)

<ชอคลาส> <ชอออบเจค>[] = new <ชอคลาส>[ขนาด];

<ชอคลาส> <ชอออบเจค>[][] = new <ชอคลาส>[ขนาดแถว][ขนาดหลก];

1 2 3 4 5 6 7

public class TestData { public static void main(String [] args) { Data d = new Data(); Data e = new Data(13); System.out.println(d.x + "," + e.x); } }

d

x = 0

e

x = 13

Page 10: Java-Chapter 13 Advanced Classes and Objects

190

© สงวนลขสทธ พฤศจกายน 2553 (ปรบปรงครงท 7 ฉบบใชตวภาค 2/2553) เรยบเรยงโดย วงศยศ เกดศร (แบงค)

Computer Programming using Java 13 - Advanced Classes and Objects

ตวอยางการประกาศและสรางอาเรยของออบเจค

โจทยขอท 4 [ระดบยาก] จงสรางคลาส Student ทใชแทนนสตหนงคน ดงรายละเอยดตอไปน (30 คะแนน)

public class Student {

//แอตทรบวประจาออบเจค 3 ตวแบบ private ไดแก (4 คะแนน) แอตทรบว id ชนดจานวนเตมเพอเกบเลขประจาตวนสต แอตทรบว name ชนดสตรงเพอเกบชอนสต แอตทรบว score ชนดจานวนจรงซงเปนอาเรยทเกบคะแนนทกรายวชาทลงทะเบยนของนสต

//ตวสรางแบบไมกาหนดพารามเตอร (2 คะแนน)

//ตวสรางแบบ 3 พารามเตอร ไดแก เลขประจาตว ชอนสต และจานวนวชาทลงทะเบยน (2 คะแนน)

d

1 2 3 4 5 6 7 8 9 10

public class TestData { public static void main(String [] args) { Data d[] = new Data[6]; for (int i = 0; i < d.length; i++) { d[i] = new Data(i); } d[2].x = 15; d[4].x = 30 } }

ประกาศออบเจค 6 ออบเจคในรป

แบบของอาเรย (โดยแตละออบเจค

จะอยในอาเรยแตละชอง)

สรางออบเจคทง 6 ออบเจคในอาเรย โดยการ new พรอมทงกาหนด

คาเรมตนใหกบแอตทรบวในแตละออบเจคโดยการวน for

d[0]

x = 0

d[1]

x = 1

d[2]

x = 15

d[3]

x = 3

d[4]

x = 30

d[5]

x = 5

Page 11: Java-Chapter 13 Advanced Classes and Objects

191

© สงวนลขสทธ พฤศจกายน 2553 (ปรบปรงครงท 7 ฉบบใชตวภาค 2/2553) เรยบเรยงโดย วงศยศ เกดศร (แบงค)

Computer Programming using Java Advanced Classes and Objects - 13

//ตวสรางแบบ 1 พารามเตอรทเปนออบเจคของคลาส Student (2 คะแนน)

//เมทอดประจาออบเจค 4 เมทอดไดแก (10 คะแนน) เมทอด getID(…) ทไมรบพารามเตอร เพอคนคาเลขประจาตวนสต เมทอด getName(…)ทไมรบพารามเตอร เพอคนคาชอนสต เมทอด getScore(…)ทไมรบพารามเตอร เพอคนคาคะแนนทกรายวชาทลงทะเบยน เมทอด setScore(…) ทรบคาคะแนนทกรายวชาของนสตทเปนอาเรยเขามาทางพารามเตอร

เพอมากาหนดคาใหกบแอตทรบว score โดยเมทอดนไมมการคนคากลบ

} //End of class

จงสรางคลาส Freshmen ทมเพยงเมทอด main(…) โดยมรายละเอยดดงตอไปน (15 คะแนน)

import java.util.Scanner; public class Freshmen {

public static void main(String[] args) { Scanner kb = new Scanner(System.in);

//กาหนดใหมนสตทงหมด 800 คน ทสรางมาจากคลาส Student (เปนอาเรยของออบเจค)

Page 12: Java-Chapter 13 Advanced Classes and Objects

192

© สงวนลขสทธ พฤศจกายน 2553 (ปรบปรงครงท 7 ฉบบใชตวภาค 2/2553) เรยบเรยงโดย วงศยศ เกดศร (แบงค)

Computer Programming using Java 13 - Advanced Classes and Objects

//กาหนดคาเรมตนใหกบเลขประจาตวของนสตของแตละคนแบบอตโนมต โดยเรยงลาดบตงแต 5300121 จนถง 5380021 และกาหนดคาเรมตนใหกบชอนสตของแตละคน โดยการวนรบคาจากแปนพมพทละชอ และกาหนดจานวนวชาทนสตทกคนลงทะเบยนเปน 4 รายวชาเทากนทกคน

//เรยกใชงานเมทอด setScore(…)ผานทางออบเจคของนสตแตละคน เพอใสคะแนนทง 4 ราย วชาใหกบนสตแตละคน โดยคาคะแนนไดจากการสมคะแนนในชวง 0 ถง 100

//แสดงเลขประจาตวนสต ชอนสต และคะแนนทง 4 รายวชาของนสตแตละคนออกทางจอภาพ

//คานวณหาคะแนนเฉลยของแตละรายวชา โดยเกดจากการเอาคะแนนแตละรายวชาของนสตทกคนมารวมกนแลวหารดวยจานวนนสตทงหมด พรอมทงแสดงผลลพธออกทางจอภาพ

Page 13: Java-Chapter 13 Advanced Classes and Objects

193

© สงวนลขสทธ พฤศจกายน 2553 (ปรบปรงครงท 7 ฉบบใชตวภาค 2/2553) เรยบเรยงโดย วงศยศ เกดศร (แบงค)

Computer Programming using Java Advanced Classes and Objects - 13

} //End of main } //End of class

3. การประกาศและสรางแอตทรบวทมประเภทขอมลแบบคลาส

1) วธการประกาศและสรางแอตทรบวทเปนออบเจค (มประเภทขอมลเปนคลาส )

โจทยขอท 5 [ระดบยาก] จงเขยนโปรแกรมภาษาจาวาทสมบร ณเพอสรางเมอง (City) ทมพนทเปนรปสเหลยมผนผาหรอสเหลยมจสตรส โดยตวเมองนนเกดจากการนาทดน (Land) แปลงใดๆ มาเรยงตอกนในรปของตาราง ซงทดนแตละแปลงจะมเจาของทดน (Owner) ครอบครองอย โดยการทางานของโปรแกรมจะแบงออกเปน 3 คลาสไดแก คลาส Owner แทนเจาของทดนแตละคน คลาส Land แทนทดนแตละแปลง และคลาส City แทนเมองหนงเมอง โดยมรายละเอยดดงน (30 คะแนน)

Owner Land City

1 2 3 4 5 6 7 8 9 10 11 12 13 14 14 16 17

public class Box { public double v; public Data d; public Box() { v = 0.0; d = new Data(); } public Box(double a, Data b) { v = a; d = new Data(b); } public Box(Box b) { v = b.v; d = new Data(b.d); } ...

}

Box v

d

x

การกาหนดคาเรมตนใหกบแอตทรบว v ซงเปนประเภท

double จะใชเครองหมายเทากบ (แบบเดมทเคยทา)

การกาหนดคาเรมตนใหกบแอตทรบว d ซงเปนออบ

เจคประเภท Data จะใชหลกการ new

Page 14: Java-Chapter 13 Advanced Classes and Objects

194

© สงวนลขสทธ พฤศจกายน 2553 (ปรบปรงครงท 7 ฉบบใชตวภาค 2/2553) เรยบเรยงโดย วงศยศ เกดศร (แบงค)

Computer Programming using Java 13 - Advanced Classes and Objects

1. คลาส Owner มรายละเอยดดงน (10 คะแนน)

public class Owner { //แอตทรบวประจาออบเจคแบบ private ชอ id เพอเกบหมายเลขประจาตว (ใหเปนจานวนเตม) //แอตทรบวประจาออบเจคแบบ private ชอ name เพอเกบชอเจาของทดน

//ตวสรางแบบ public ทไมมพารามเตอร เพอกาหนดคาเรมตนใหกบแอตทรบวทงสองตวใหเปนคาเรมตนตามประเภทขอมลของแอตทรบวนน (เชน int เปน 0 หรอ double เปน 0.0 เปนตน)

//ตวสรางแบบ public ทมพารามเตอร 2 ตวทเปนจานวนเตมและสตรง เพอกาหนดคาเรมตนใหกบแอตทรบวทงสองตวใหเปนไปตามคาทระบ

//ตวสรางแบบ public ทมพารามเตอร 1 ตวทเปนออบเจคชนด Owner เพอกาหนดคาเรมตนใหกบแอตทรบวทงสองตวใหเปนไปตามคาทไดจากออบเจคนน

//เมทอดประจาออบเจคแบบ public ชอ getID ทไมมพารามเตอร เพอคนคาหมายเลขประจาตว

Page 15: Java-Chapter 13 Advanced Classes and Objects

195

© สงวนลขสทธ พฤศจกายน 2553 (ปรบปรงครงท 7 ฉบบใชตวภาค 2/2553) เรยบเรยงโดย วงศยศ เกดศร (แบงค)

Computer Programming using Java Advanced Classes and Objects - 13

//เมทอดประจาออบเจคแบบ public ชอ getName ทไมมพารามเตอร เพอคนคาชอเจาของทดน

//เมทอดประจาออบเจคแบบ public ชอ setID ทรบคาจากพารามเตอร 1 ตว เพอใชกาหนดคาให กบหมายเลขประจาตว (กาหนดคาใหแอตทรบว id) โดยไมมการคนคากลบ

//เมทอดประจาออบเจคแบบ public ชอ setName ทรบคาจากพารามเตอร 1 ตว เพอใชกาหนดคาใหกบชอเจาของทดน (กาหนดคาใหแอตทรบว name) โดยไมมการคนคากลบ

//เมทอดประจาออบเจคแบบ public ชอ show ทไมมพารามเตอร เพอแสดงคาของแอตทรบวทงสองตวออกทางจอภาพทละบรรทด โดยไมมการคนคากลบ

} //End of class

2. คลาส Land มรายละเอยดดงน (10 คะแนน)

public class Land { //แอตทรบวประจาออบเจคแบบ public ชอ n ทเปนออบเจคของคลาส Owner (ประกาศออบเจคจากคลาส Owner มาเปนแอตทรบวในคลาส Land) เพอเปนตวแทนของเจาของทดนแปลงน //แอตทรบวประจาออบเจคแบบ public ชอ price เพอเกบราคาทดน

Page 16: Java-Chapter 13 Advanced Classes and Objects

196

© สงวนลขสทธ พฤศจกายน 2553 (ปรบปรงครงท 7 ฉบบใชตวภาค 2/2553) เรยบเรยงโดย วงศยศ เกดศร (แบงค)

Computer Programming using Java 13 - Advanced Classes and Objects

//ตวสรางแบบ public ทไมมพารามเตอร เพอกาหนดคาเรมตนใหกบแอตทรบวทงสองตวใหเปนคาเรมตนตามประเภทขอมลของแอตทรบวน น (แอตทรบวทเปนออบเจคใหใชการ new)

//ตวสรางแบบ public ทมพารามเตอร 2 ตวทเปนออบเจคชนด Owner และจานวนจรง เพอกาหนดคาเรมตนใหกบแอตทรบวทงสองตวใหเปนไปตามคาทระบ

//เมทอดประจาออบเจคแบบ public ชอ setOwner ทมพารามเตอร 1 ตวคอออบเจคของคลาส Owner เพอใชกาหนดคาใหกบเจาของทดนแปลงน (กาหนดคาใหแอตทรบว n ทเปนออบเจค) โดยไมมการคนคากลบ

//เมทอดประจาออบเจคแบบ public ชอ setPrice ทมพารามเตอร 1 ตวเพอใชกาหนดคาใหกบราคาทดนแปลงน (กาหนดคาใหแอตทรบว price) โดยไมมการคนคากลบ

//เมทอดประจาออบเจคแบบ public ชอ show ทไมมพารามเตอร เพอแสดงคาของแอตทรบวทงสองตวออกทางจอภาพทละบรรทด โดยไมมการคนคากลบ

} //End of class

Page 17: Java-Chapter 13 Advanced Classes and Objects

197

© สงวนลขสทธ พฤศจกายน 2553 (ปรบปรงครงท 7 ฉบบใชตวภาค 2/2553) เรยบเรยงโดย วงศยศ เกดศร (แบงค)

Computer Programming using Java Advanced Classes and Objects - 13

3. คลาส City ทมเมทอด main โดยมรายละเอยดภายในเมทอด main ดงน (10 คะแนน)

import java.util.Scanner; public class City { public static void main(String[] args) {

//สรางเมองทเปนอาเรยของออบเจค Land ทประกอบไปดวยทดน 3000 แปลง ขนาด 50 x 60 (เปนอาเรยสองมต)

//ภายในทดนแตละแปลงตองมเจาของทดนและราคาทกแปลง โดยเรมตนใหทดนทกแปลงยงไมมเจาของครอบครอง (กาหนดเจาของทดนใหเปน Default) และสมราคาทดนตงแตราคา 1 บาทจนถง 10 ลานบาทเพอกาหนดใหกบทดนแตละแปลง

//สรางออบเจคชอ ow1 ทเปนเจาของทดนชอ "Tukie" โดยมเลขประจาตวเปน 1001 พรอมแสดงขอมลของเจาของทดนคนนนบนจอภาพ

//สรางออบเจคชอ ow2 ทเปนเจาของทดนชอ "Annie" โดยมเลขประจาตวเปน 1002 พรอมแสดงขอมลของเจาของทดนคนนนบนจอภาพ

//กาหนดให Tukie ครอบครองทดนในแปลงตาแหนงท (4, 9) พรอมทงแสดงขอมลทดนแปลงนนออกทางจอภาพ

Page 18: Java-Chapter 13 Advanced Classes and Objects

198

© สงวนลขสทธ พฤศจกายน 2553 (ปรบปรงครงท 7 ฉบบใชตวภาค 2/2553) เรยบเรยงโดย วงศยศ เกดศร (แบงค)

Computer Programming using Java 13 - Advanced Classes and Objects

//เปลยนราคาทดนท Tukie ครองครองอย ใหเปน 30 ลานบาท พรอมทงแสดงขอมลทดนแปลงนนออกทางจอภาพ

//เปลยนให Annie เขาไปครอบครองทดนแปลงท Tukie ครอบครองอย พรอมทงแสดงขอ มลทดนแปลงนนออกทางจอภาพ

//กาหนดให Tukie เขาครอบครองทดนแปลงใหม 50 แปลงทอยทางซายสดของเมอง (แถวท 1 ของเมอง) พรอมกาหนดใหราคาทดนทกแปลงเปน 50 ลานบาท พรอมทงแสดงขอมลของทดนแตละแปลงออกทางจอภาพ

} //End of main } //End of class

โจทยขอท 6 [ระดบยาก] โปรแกรมทกาหนดใหตอไปนเปนโปรแกรมทใชคลาส Scanner ในการรบคาตวเลขจานวนเตม 1 คาจากแปนพมพ แลวตามดวยรบคาสตรงอก 1 คาจากแปนพมพ ซงผลปรากฎวาเกดขอผดพลาดขนกบตวโปรแกรม โดยโปรแกรมเมอรบคาตวเลขจานวนเตมเรยบรอยแลว จะไมสามารถรอรบคาสตรงตอไปได เมอตรวจสอบสาเหตกพบวา หลงจากรบคาตวเลขจานวนเตมแลวตามดวยการกดปม Enter จะมอกขระบางตวทมองไมเหนเกดขน ซงอกขระดงกลาวไดถกเกบเขาไปในตวแปรสตรงทตงใจจะรบคาในตอนแรกแทน จงทาใหโปรแกรมไมสามารถรอรบคาสตรงทตองการได

1 2 3 4 5 6 7 8 9 10 11

import java.util.Scanner; public class Test { public static void main(String[] args) { Scanner kb = new Scanner(System.in); System.out.print("Enter Int: "); int a = kb.nextInt(); System.out.print("Enter Str: "); String b = kb.nextLine(); System.out.println(a + "," + b); } }

ผลลพธจรงทได Enter Int: 10 Enter Str: 10

ผลลพธทควรจะได (แตไมไดตามน) Enter Int: 10 Enter Str: Java 10,Java

Page 19: Java-Chapter 13 Advanced Classes and Objects

199

© สงวนลขสทธ พฤศจกายน 2553 (ปรบปรงครงท 7 ฉบบใชตวภาค 2/2553) เรยบเรยงโดย วงศยศ เกดศร (แบงค)

Computer Programming using Java Advanced Classes and Objects - 13

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

import java.util.Scanner; import java.io.InputStream; public class SScanner {

//แอตทรบวประจาออบเจคชอ kb ทมชนดเปนแบบ Scanner

//ตวสรางทรบพารามเตอร 1 ตวชอ in ทมชนดเปนแบบ InputStream เพอกาหนดคาเรมตนใหกบ แอตทรบว kb

//เมทอดประจาออบเจคชอ nextInt(…) ทไมรบพารามเตอรใดๆ โดยจะรบคาตวเลขจานวนเตม 1 คาจากแปนพมพแลวคนคาตวเลขทรบนน

//เมทอดประจาออบเจคชอ nextLine(…) ทไมรบพารามเตอรใดๆ โดยจะรบคาสตรง 1 คาจากแปน พมพ ถาสตรงมความยาวมากกวา 0 ใหคนคาสตรงทรบมา ถาไมเชนนนจะวนรบไปเรอยๆ

} //End of class

Page 20: Java-Chapter 13 Advanced Classes and Objects

200

© สงวนลขสทธ พฤศจกายน 2553 (ปรบปรงครงท 7 ฉบบใชตวภาค 2/2553) เรยบเรยงโดย วงศยศ เกดศร (แบงค)

Computer Programming using Java 13 - Advanced Classes and Objects

จงสรางคลาสอกหนงคลาสชอ TestSScanner เพอเรยกใชงานคลาส SScanner แลวทาการรบคาแบบเดมอกครงหนง เพอทดสอบวาโปรแกรมสามารถทางานไดอยางไมผดพลาดอกตอไป (5 คะแนน)

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

} //End of main } //End of class

โจทยขอท 7 [ระดบเทพ] นางสาวแอนน (มอล) นสตทงดงามทสดในภาคพนเอเชยตะวนออกเฉยงใต ไดจดเตรยมของขวญสาหรบแจกเหลาบรรดาหนมๆ ซงมารมจบเธออยางไมขาดสาย โดยของขวญของเธอนนเปนกระเชาผลไมทจดตกแตงอยางสวยงาม แตเนองจากการรมรอนและอดอนในวชาจาวาของเธอ จงทาใหแอนนเขยนโปรแกรมภาษาจาวาเพอสรางกระเชาผลไมทใชสาหรบใสผลไมขนมา โดยประกอบไปดวยคลาส 3 คลาสไดแก คลาส Fruit เพอแทนผลไม คลาส Basket เพอแทนกระเชา และคลาส FruitBasket เพอใชเปนกระเชาผลไมทจดตกแตงอยางสวยงามพรอมใชแจกใหกบบรรดากก เอย! บรรดาหนมๆ ของเธอ โดยมรายละเอยดของแตละคลาสดงตอไปน (50 คะแนน)

1. คลาส Fruit เพอแทนผลไมหนงผลใดๆ (10 คะแนน) public class Fruit {

//แอตทรบวประจาออบเจคชอ name เพอเกบชอผลไม เชน สม แอปเปล กลวย เปนตน //แอตทรบวประจาออบเจคชอ weigh เพอเกบนาหนกของผลไม

//กาหนดใหแอตทรบว wh แทนนาหนกทเปนไปไดทงหมดของผลไมแตละผล private final double wh[] = { 0.1, 0.2, 0.3, 0.4, 0.5 };

//ตวสราง 4 แบบ ดงตอไปน ตวสรางแบบไมมพารามเตอร เพอกาหนดคาเรมตนใหกบแอตทรบวทกตว ตวสรางแบบหนงพารามเตอรท เปนสตรง เพอใชกาหนดชอผลไม สวนนาหนกของผลไมนนจะ

ไดจากการสม (แนะนาใหเรยกใชแอตทรบว wh)

Page 21: Java-Chapter 13 Advanced Classes and Objects

201

© สงวนลขสทธ พฤศจกายน 2553 (ปรบปรงครงท 7 ฉบบใชตวภาค 2/2553) เรยบเรยงโดย วงศยศ เกดศร (แบงค)

Computer Programming using Java Advanced Classes and Objects - 13

ตวสรางแบบสองพารามเตอรทเปนสตรงและจานวนจรง เพอใชกาหนดชอผลไม และนาหนก ขอผลไมตามลาดบ

ตวสรางแบบหนงพารามเตอรประเภท Fruit เพอใชกาหนดชอผลไม และนาหนกของผลไม

//เมทอดประจาออบเจคชอ showFruit เพอใชแสดงรายละเอยดของผลไมขนบนจอภาพ

} //End of class

2. คลาส Basket เพอแทนกระเชา (20 คะแนน) public class Basket {

//แอตทรบวประจาออบเจคชอ fruit ประเภท Fruit ซงเปนอาเรยทใชสาหรบเกบผลไม //แอตทรบวประจาออบเจคชอ count เพอบอกจานวนของผลไมทเกบอยในกระเชา

Page 22: Java-Chapter 13 Advanced Classes and Objects

202

© สงวนลขสทธ พฤศจกายน 2553 (ปรบปรงครงท 7 ฉบบใชตวภาค 2/2553) เรยบเรยงโดย วงศยศ เกดศร (แบงค)

Computer Programming using Java 13 - Advanced Classes and Objects

//ตวสรางแบบไมมพารามเตอรเพอกาหนดใหกระเชาสามารถเกบจานวนผลไมไดสงสด 10 ผล

//ตวสรางแบบหนงพารามเตอรชนดจานวนเตม เพอกาหนดใหกระเชาสามารถเกบจานวนผลไมไดสงสดตามจานวนเต มทระบ

//ตวสรางแบบหนงพารามเตอรชนด Basket เพอกาหนดใหกระเชามขอมลทกอยางเหมอนกบกระเชาทรบเขามา พรอมทงนาผลไมจากกระเชาทรบเขามาทางพารามเตอรมาใสในกระเชาน

//เมทอดประจาออบเจคชอ isFull เพอตรวจสอบวากระเชาเตมหรอไม พรอมทงคนคากลบ

//เมทอดประจาออบเจคชอ isEmpty เพอตรวจสอบวากระเชาวางหรอไม พรอมทงคนคากลบ

Page 23: Java-Chapter 13 Advanced Classes and Objects

203

© สงวนลขสทธ พฤศจกายน 2553 (ปรบปรงครงท 7 ฉบบใชตวภาค 2/2553) เรยบเรยงโดย วงศยศ เกดศร (แบงค)

Computer Programming using Java Advanced Classes and Objects - 13

//เมทอดประจาออบเจคชอ takeIn เพอรบผลไมเขามา 1 ผลเพอนาไปเกบในกระเชา โดยกอนจะเกบลงไป จะตองตรวจสอบกอนวากระเชาเตมหรอไม ถาเตมใหแสดงขอความวา “Basket Full” แตถาไมเตมกใหเกบผลไมลงไปในกระเชา พรอมทงนบจานวนผลไมทอยในกระเชาดวยวามอยกผล

//เมทอดประจาออบเจคชอ takeOut เพอนาผลไม 1 ผลออกจากกระเชา โดยกอนจะนาออกไป จะ ตองตรวจสอบกอนวากระเชาวางหรอไม ถาวางใหแสดงขอความวา “Basket Empty” แตถาไมวางกใหนาผลไมออกจากกระเชา พรอมทงนบจานวนผลไมทอยในกระเชาดวยวามอยกผล

//เมทอดประจาออบเจคชอ getTotalWeigh เพอคนคานาหนกรวมของผลไมทงหมดในกระเชา

Page 24: Java-Chapter 13 Advanced Classes and Objects

204

© สงวนลขสทธ พฤศจกายน 2553 (ปรบปรงครงท 7 ฉบบใชตวภาค 2/2553) เรยบเรยงโดย วงศยศ เกดศร (แบงค)

Computer Programming using Java 13 - Advanced Classes and Objects

//เมทอดประจาออบเจคชอ showBasket เพอใชแสดงรายละเอยดของผลไมในกระเชาขนบนจอภาพ

} //End of class

3. คลาส FruitBasket เพอใชเปนกระเชาผลไมทจดตกแตงอยางสวยงาม (20 คะแนน) import java.util.Scanner; public class FruitBasket {

//เมทอดประจาคลาสชอ getFruitBasket เพอใชสรางกระเชาผลไม 1 กระเชาโดยจะตองรบคาชอผลไมชนดใดชนดหนง (สม แอปเปล ฯลฯ) นาหนกของผลไม (เทากนทกผล) และจานวนของผลไมในกระเชาผานทางพารามเตอร พรอมทงคนคากระเชาผลไมทจดเกบเรยบรอยแลวกลบมา

//เมทอดประจาคลาสชอ showFruitBasket ทรบกระเชาเขามาทางพารามเตอร เพอใชแสดงคาขอ-มลในกระเชาขนบนจอภาพ ซงไดแก นาหนกรวมของกระเชา (Total Weigh) จานวนผลไมทงหมดในกระเชา (Total Fruit) และรายละเอยดของผลไมในกระเชาแตละผล (List of Fruit)

Page 25: Java-Chapter 13 Advanced Classes and Objects

205

© สงวนลขสทธ พฤศจกายน 2553 (ปรบปรงครงท 7 ฉบบใชตวภาค 2/2553) เรยบเรยงโดย วงศยศ เกดศร (แบงค)

Computer Programming using Java Advanced Classes and Objects - 13

//เมทอด main เพอใชในการจดเกบและตกแตงผลไมในกระเชา public static void main(String[] args) {

//สรางกระเชาผลไมขนมา 3 กระเชา (เปนอาเรยทเปนประเภท Basket) โดยในการสรางกระเชานนใหเรยกใชเมทอด getFruitBasket ซงกระเชาท 1 เปนกระเชาแอปเปล (Apple) นาหนกผลล 0.12 กรม จานวน 25 ผล กระเชาท 2 เปนกระเชาสม (Orange) นาหนกผลละ 0.1 กรม จานวน 30 ผล และ กระเชาท 3 เปนกระเชาเมลอน (Melon) นาหนกผลละ 0.45 กรม จานวน 15 ผล

//สรางกระเชาผลไมเปลาๆ ขนมาอก 6 กระเชา (เปนอาเรยทเปนประเภท Basket) แลวทาการหยบผลไมจาก 3 กระเชาแรกทไดสรางไวกอนหนานลงไปในกระเชาเปลาทง 6 กระเชานน โดยใหหยบผลไมจากกระเชาท 1-3 เรยงตามลาดบไปเรอยๆ จนกวากระเชาเปลาจะเตมทกกระเชา พรอมทงแสดงรายละเอยดของผลไมในแตละกระเชาทจดเกบเรยบรอยแลวขนบนจอภาพโดยการเรยกใชเมทอด showFruitBasket

} //End of main } //End of class

Page 26: Java-Chapter 13 Advanced Classes and Objects

206

© สงวนลขสทธ พฤศจกายน 2553 (ปรบปรงครงท 7 ฉบบใชตวภาค 2/2553) เรยบเรยงโดย วงศยศ เกดศร (แบงค)

Computer Programming using Java 13 - Advanced Classes and Objects

โจทยขอท 8 [ระดบเทพ] จงเขยนโปรแกรมภาษาจาวาใหสมบร ณเพอสรางหองตวจาวา ซงกคอหอง 302 ตก 1 คณะวศวกรรมศาสตร จฬาลงกรณมหาวทยาลย โดยจะประกอบไปดวยคลาส 2 คลาส ไดแกคลาส Student ทแทนนสตแตละคน และคลาส Room ทแทนหองตวจาวา โดยภายในหองตวจะมนสตนงอยขางใน ซงตาแหนงทนงของนสตแตละคนจะจดใหตามระดบความเกรยน (Noob Levels) ของนสตคนนน ซงจะม 4 ระดบไดแก ระดบท 1 เกรยน (Noob) ระดบท 2 เกรยนเรยกพอ (Father Noob) ระดบท 3 เกรยนเทพ (God Noob) ระดบท 4 เกรยนเมพ (Hof Noob) โดยรายละเอยดการทางาน และรายละเอยดของคลาสทงสองมดงตอไปน (30 คะแนน) 1. คลาส Student มรายละเอยดดงน (10 คะแนน)

public class Student { //แอตทรบวประจาออบเจคแบบ private ชอ id เกบเลขประจาตวนสต //แอตทรบวประจาออบเจคแบบ private ชอ name เกบชอนสต //แอตทรบวประจาออบเจคแบบ private ชอ noob เกบระดบความเกรยน

//ตวสรางแบบไมมพารามเตอร เพอกาหนดคาเรมตนใหกบแอตทรบวทกตว

//ตวสรางแบบทรบพารามเตอร 3 ตวเพอกาหนดคาเรมตนใหกบแอตทรบวทกตว

//ตวสรางแบบทรบพารามเตอรเปนชนด Student เพอกาหนดคาเรมตนใหกบแอตทรบวทกตว

Page 27: Java-Chapter 13 Advanced Classes and Objects

207

© สงวนลขสทธ พฤศจกายน 2553 (ปรบปรงครงท 7 ฉบบใชตวภาค 2/2553) เรยบเรยงโดย วงศยศ เกดศร (แบงค)

Computer Programming using Java Advanced Classes and Objects - 13

//เมทอดประจาออบเจคแบบ public ชอ getID ทไมมพารามเตอร เพอคนเลขประจาตวนสต

//เมทอดประจาออบเจคแบบ public ชอ getName ทไมมพารามเตอร เพอคนชอนสต

//เมทอดประจาออบเจคแบบ public ชอ getNoob ทไมมพารามเตอร เพอคนระดบความเกรยน

//เมทอดประจาออบเจคแบบ public ชอ set ทรบพารามเตอรชนด Student เพอนามากาหนด คาใหกบแอตทรบวทกตวใหเหมอนกบคาพารามเตอรนน

//เมทอดประจาออบเจคแบบ public ชอ show ทไมมพารามเตอร เพอแสดงคาของแอตทรบวทกตวในคลาสนขนบนจอภาพ ซงประกอบไปดวยเลขประจาตว ตามดวยชอ และตามดวยระดบความเกรยน โดยถาระดบความเกรยนเปน 1 ใหแสดงวา "[1-Noob]" ถาระดบความเกรยนเปน 2 ใหแสดงวา "[2-Father Noob]" ถาระดบความเกรยนเปน 3 ใหแสดงวา "[3-God Noob]" ถาระดบความเกรยนเปน 4 ใหแสดงวา "[4-Hof Noob]" ถาไมเชนนนใชแสดงวา "[Un- known]" โดยใหทกคาแสดงอยภายในบรรทดเดยวกน

Page 28: Java-Chapter 13 Advanced Classes and Objects

208

© สงวนลขสทธ พฤศจกายน 2553 (ปรบปรงครงท 7 ฉบบใชตวภาค 2/2553) เรยบเรยงโดย วงศยศ เกดศร (แบงค)

Computer Programming using Java 13 - Advanced Classes and Objects

} //End of class

2. คลาส Room แทนหองตวจาวา หอง 302 ตก 1 โดยกาหนดใหม 16 แถว แถวละ 40 ทนง โดยใน 40 ทนงนนจะนงไดจรงแค 38 ท นงเพราะถกเวนไวสาหรบชองทางเดนตรงกลางหอง โดยมแผนผงหองตามตวอยางทกาหนดให และมรายละเอยดของโปรแกรมดงตอไปน (20 คะแนน)

public class Room { //แอตทรบวประจาคลาสแบบ public ชอ s ทเปนอาเรย 2 มต โดยมชนดเปนแบบ Student เพอใชสาหรบสรางทนงใหกบหองตวจาวา โดยกาหนดใหหอง 302 ตก 1 ม 16 แถว แถวละ 40 ทนง

เมทอดประจาคลาสแบบ public void ชอ setSeat ทรบพารามเตอรเปนชนด Student (นสต 1 คน) เขามาเพอนามาจดสรรทนงใหกบนสตผนน โดยใหพจารณาระดบความเกรยนดงน (1) ถาระดบความเกรยนเปน 1 ใหเลอกทนงตงแตแถวท 13-16 (2) ถาระดบความเกรยนเปน 2 ใหเลอกทนงตงแตแถวท 9-12 (3) ถาระดบความเกรยนเปน 3 ใหเลอกทนงตงแตแถวท 5-8 (4) ถาระดบความเกรยนเปน 4 ใหเลอกทนงตงแตแถวท 1-4 //โดยตาแหนงทนงนนใหจดสรรเรยงตามลาดบทนงวางของแตละแถวไปเรอยๆ จนเตมแถว และจะไมมการจดสรรทนงบรเวณทางเดนกลางหอง (ปลอยวางเอาไว)

แถวท 1

แถวท 16

Page 29: Java-Chapter 13 Advanced Classes and Objects

209

© สงวนลขสทธ พฤศจกายน 2553 (ปรบปรงครงท 7 ฉบบใชตวภาค 2/2553) เรยบเรยงโดย วงศยศ เกดศร (แบงค)

Computer Programming using Java Advanced Classes and Objects - 13

//เมทอดประจาคลาสแบบ public void ชอ showRoom ทไมรบพารามเตอร เพอใชแสดงแผนผงหองตวพรอมกบระบตาแหนงของนสตทกาลงนงอยในหอง ณ ขณะนน ตามทไดถกจดสรรทนงเอาไว โดยถาทนงมนสตนงใหแสดงตวอกษรตวแรกของชอนสตขนบนแผนผงหอง เชน W, T เปนตน แตถาทนงวางใหแสดงเปนสญลกษณชารป (#) สวนบรเวณทางเดนใหแสดงเปนชองวาง

//เมทอดประจาคลาสแบบ public void ชอ showStudent ทรบพารามเตอรเขามา 2 ตว เปนลา ดบแถวและหลกของทนง เพอแสดงขอมลของนสตทนงอย ณ ตาแหนงนน

Page 30: Java-Chapter 13 Advanced Classes and Objects

210

© สงวนลขสทธ พฤศจกายน 2553 (ปรบปรงครงท 7 ฉบบใชตวภาค 2/2553) เรยบเรยงโดย วงศยศ เกดศร (แบงค)

Computer Programming using Java 13 - Advanced Classes and Objects

//เมทอดประจาคลาสแบบ public void ชอ showStudent ทไมรบพารามเตอร เพอแสดงขอมลของนสตทกคนทอยในหองตว พรอมทงระบตาแหนงทนงของนสตแตละคน

//เมทอด main(…) เพอประมวลผลการจดสรรหองตวดงตอไปน (1) กาหนดใหแอตทรบว s ทเปนอาเรย 2 มตชนด Student ทกชอง มคาเรมตนเปนทนงวาง (แตละ

ชองมเลขประจาตวนสตเปน 0 ชอเปน "" และระดบความเกรยนเปน 0 (2) สรางนสตจานวน 5 คนไดแกนสตชอ Akeudom, Phakhin, Taparb, Ong-ard และ Wongyos

ตามลาดบ และมระดบความเกรยนเปน 1, 1, 2, 3, และ 4 ตามลาดบ โดยใหกาหนดเลขประจาตวนสตไดอยางอสระ

(3) จดสรรทนงในหองตวใหกบนสตทง 5 คน โดยเรยกใชเมทอด setSeat(…) (4) แสดงแผนผงหองตวเพอแสดงตาแหนงทนงของนสตทง 5 คน โดยเรยกใชเมทอด showRoom(…) (5) แสดงขอมลของนสตทกคนในหองตวโดยเรยกใชเมทอด showStudent(…)

} //End of class