29
1 JAVA Programming Week 9 อีนัม (enum)* อาจารยพัลลภ ฮวบสมบูรณ ภาควิชาคณิตศาสตรและสถิติ คณะวิทยาศาสตร มหาวิทยาลัยมหิดล (*ดัดแปลงจาก slide ของผูแตงหนังสือ เขียนโปรแกรม Java เบื้องตน)

JAVA Programming - Mahidol Universitymucc.mahidol.ac.th/~scphc/Classes/Java/wk9_Enum.pdf · JAVA Programming Week 9 อีนัม (enum)* อาจารย พัลลภ ฮวบสมบูรณ

  • Upload
    others

  • View
    11

  • Download
    0

Embed Size (px)

Citation preview

1

JAVA ProgrammingWeek 9

อีนัม (enum)*

อาจารยพลัลภ ฮวบสมบรูณภาควชิาคณติศาสตรและสถิติ

คณะวทิยาศาสตร มหาวทิยาลยัมหิดล(*ดัดแปลงจาก slide ของผูแตงหนังสือ “เขียนโปรแกรม Java เบื้องตน”)

2

หัวขอ

ขอจํากัดของคาคงที่แบบชนิดขอมลูพื้นฐาน

อีนมั

เมธอดของอีนมั

แอททริบวิทของอนีมั

3

ขอจํากัดของคาคงที่แบบชนิด

ขอมูลพื้นฐาน

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

6

อนีัม

7

อีนัม

ชนิดขอมลูที่สรางขึน้ใหม

มีคา (value) ที่เปนไปไดอยูไมกี่คา เชน

อีนมั เกรด มีไดเพียง 5 คา คอื A, B, C, D, F

อีนมั เพศ มีไดเพียง 2 คา คือ ชาย, หญงิ อีนมั สีสัญญาณไฟ มีไดเพียง 3 คา คือ แดง, เหลอืง, เขียว

8

การประกาศอีนัม

รูปแบบ

enum อีนัม { คา1, คา2, ...}ตัวอยาง

enum Grade { A, B, C, D, F }

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);

}

}

12

เมธอด

13

เมธอด

อีนมัสามารถมีเมธอดไดเหมอืนกับคลาส

การเรยีกใชเมธอดทําโดยผานตวัแปรอีนมั

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");

}

}

18

แอททริบิวท

19

แอททริบิวท

คาคงที่

ตัวแปร

20

คาคงที่

public enum Grade {

public final int point;}

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");

}}

23

แอททริบิวท

public enum Grade {

public final int point;

private String meaning;

}

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());

}

}

27

สรุป

28

สรุป

อีนมัคือชนิดขอมลูแบบหนึ่งที่มีคาที่เปนไดอยูไมกี่คา ควรใชอีนัมแทนการประกาศกลุมของคาคงที่

ตัวแปรชนิดอนีมัเก็บไดเฉพาะคาที่ประกาศไวในอนีมั

เทานัน้

เราไมสามารถนําตวัแปรอีนมัมาใชคํานวณได

เราสามารถเขียนเมธอดและแอททริบวิทในอนีมัได

29

ใหนักศึกษาสราง อีนัม Day ทีน่ําเสนอวัน (เชน อาทิตย, จันทร

, อังคาร …) เขียนเมธอด String getAbbreviation() เพื่อสง

สตรงิที่เปนคํายอของวัน เชน วันอาทิตยมีคํายอคือ Sun เปน

ตน จากนั้นพิมพวันทั้งหมดพรอมคํายอออกทางหนาจอ

สงโปรแกรม (source code) มาที ่[email protected]

Exercise