java-chapter 13 advanced classes and objects

30
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

Upload: wongyos-keardsri

Post on 10-Dec-2014

1.123 views

Category:

Documents


0 download

DESCRIPTION

Chapter 13 Advanced Classes and Objects

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