Upload
others
View
17
Download
0
Embed Size (px)
Citation preview
1
JAVA ProgrammingWeek 9
อีนัม (enum)*
อาจารยพลัลภ ฮวบสมบรูณภาควชิาคณติศาสตรและสถิติ
คณะวทิยาศาสตร มหาวทิยาลยัมหิดล(*ดัดแปลงจาก slide ของผูแตงหนังสือ “เขียนโปรแกรม Java เบื้องตน”)
4
คาคงที่แบบชนิดขอมูลพื้นฐาน
การประกาศคาคงที่ใชคําวา final
final static char grade_A = 'A';
final static char grade_B = 'B';
final static char grade_C = 'C';
final static char grade_D = 'D';
final static char grade_F = 'F';
5
ขอจํากัดของคาคงที่
ตัวแปรทีใ่ชเก็บเกรดไมจําเปนตองนําคาคงที่จากเกรดทั้ง
หามาใส char myGrade = grade_A;char yourGrade = 'Z';
เปนเพียงชนิดขอมลูพื้นฐาน ไมมีเมธอดและแอตทริบิวต นํามาคํานวณได แตไม make sense
เชน grade_A + grade_F
7
อีนัม
ชนิดขอมลูที่สรางขึน้ใหม
มีคา (value) ที่เปนไปไดอยูไมกี่คา เชน
อีนมั เกรด มีไดเพียง 5 คา คอื A, B, C, D, F
อีนมั เพศ มีไดเพียง 2 คา คือ ชาย, หญงิ อีนมั สีสัญญาณไฟ มีไดเพียง 3 คา คือ แดง, เหลอืง, เขียว
9
การพิมพคาทุกคาในอีนัม
public class TestGrade1 {
public static void main(String[] args) {
for (Grade grade : Grade.values()) {
System.out.println(grade);
}
}
}
10
ตัวแปรชนิดอีนัม
public class Enum {
enum Grade { A, B, C, D, F }
public static void main(String[] args) {
Grade myGrade = Grade.A;
System.out.println(myGrade);
}
}
11
การกําหนดคาอื่นๆใหกับตัวแปรอีนัมpublic class Enum {
enum Grade { A, B, C, D, F }
public static void main(String[] args) {
Grade myGrade = Grade.A;
myGrade = 'Z';
myGrade = Grade.Z;
System.out.println(myGrade);
}
}
14
การพิมพแตมระดับคะแนนจากเกรดint point = 0;
Grade myGrade = Grade.A;
switch (myGrade) {
case A:
point = 4; break;
....
case F:
point = 0;
}
System.out.println("My grade is "+ myGrade + " = " + point + " points");
15
ขอจํากัด: โปรแกรมเมอรอาจจะใหแตมไมเหมือนกันint point = 0;
Grade myGrade = Grade.A;
switch (myGrade) {
case A:
point = 5; break;
....
case F:
point = 0;
}
System.out.println("My grade is "+ myGrade + " = " + point + " points");
16
แกไขโดยสรางเมธอดในอีนัมpublic enum Grade {
A, B, C, D, F;
int getPoint() {
switch (this) {
case A: return 4;
...
default: return 0;
}
}
}
17
เรียกเมธอดของอีนัมpublic class TestGrade4 {
public static void main(String[] args) {
Grade myGrade = Grade.A;
System.out.print("My grade is " + myGrade +" = ");
System.out.println(myGrade.getPoint() + " points");
}
}
21
กําหนดคาของคาคงทีด่วยคอนสตรักเตอร
public enum Grade {A(4), B(3), C(2), D(1), F(0);
private Grade(int p) {point = p;
}
public final int point;}
22
อานคาคงที่
public class TestGrade {public static void main(String[] args) {
Grade myGrade = Grade.A;
System.out.print("My grade is " + myGrade + "=");System.out.println(myGrade.point + " points");
}}
24
กําหนดคาดวยคอนสตรักเตอรpublic enum Grade {
A(4, "Awesome"),
B(3, "Bravo"),
...
public Grade(int p, String m) {
point = p;
meaning = m;
}
public final int point;
private String meaning;
}
25
กําหนดและอานคาดวยเมธอดpublic enum Grade {
...
public void setMeaning(String m) {
meaning = m;
}
public String getMeaning() {
return meaning;
}
public final int point;private String meaning;
}
26
เรียกใชเมธอดpublic class TestGrade7 {
public static void main(String[] args) {
Grade.A.setMeaning("Awful");
Grade myGrade = Grade.C;
myGrade.setMeaning("Cool");
for( Grade g : Grade.values()) {
System.out.print(g + " means ");
System.out.println(g.getMeaning());
}
}
28
สรุป
อีนมัคือชนิดขอมลูแบบหนึ่งที่มีคาที่เปนไดอยูไมกี่คา ควรใชอีนัมแทนการประกาศกลุมของคาคงที่
ตัวแปรชนิดอนีมัเก็บไดเฉพาะคาที่ประกาศไวในอนีมั
เทานัน้
เราไมสามารถนําตวัแปรอีนมัมาใชคํานวณได
เราสามารถเขียนเมธอดและแอททริบวิทในอนีมัได
29
ใหนักศึกษาสราง อีนัม Day ทีน่ําเสนอวัน (เชน อาทิตย, จันทร
, อังคาร …) เขียนเมธอด String getAbbreviation() เพื่อสง
สตรงิที่เปนคํายอของวัน เชน วันอาทิตยมีคํายอคือ Sun เปน
ตน จากนั้นพิมพวันทั้งหมดพรอมคํายอออกทางหนาจอ
สงโปรแกรม (source code) มาที ่[email protected]
Exercise