Зчислення (enumeration). Ключове слово enum. Приклади
Зміст
- 1. Поняття про зчислення. Загальна форма оголошення зчислення. Ключове слово enum
- 2. Приклади програм, що використовують зчислення
- 3. Метод values(). Отримати константи зчислення у вигляді масиву
- 4. Метод valueOf(). Конвертувати рядкове представлення константи у значення зі зчислення
- Споріднені теми
Пошук на інших ресурсах:
1. Поняття про зчислення. Загальна форма оголошення зчислення. Ключове слово enum
Зчислення з’явились у Java починаючи з версії JDK 5. У найбільш загальному випадку, зчислення – це перелік (список) іменованих констант. Для оголошення зчислення використовується ключове слово enum.
Робота зі зчисленнями у Java має свої особливості, що не характерні деяким іншим мовам програмування, зокрема C++. У мові Java зчислення є класами. Тому, для них властиві усі можливості класів. Це означає, що зчислення можуть мати конструктори, методи, змінні екземпляру та реалізації інтерфейсу.
Загальна форма оголошення зчислення наступна:
enum EnumName { constant1, constant2, ..., constantN }
тут
- EnumName – ім’я зчислення, яке є типом даних. EnumName – це також є ім’я класу;
- constant1, constant2, …, constantN – перелік іменованих констант, що складають множину значень зчислення EnumName. Іменовані константи є відкритими статичними кінцевими членами класу EnumName. Ці константи ще називаються самотипізованими.
На основі типу зчислення EnumName можна оголошувати змінні даного типу за зразком нижче
EnumName obj;
тут obj – ім’я екземпляру типу EnumName. Створення екземпляру типу зчислення obj здійснюється без використання оператора new. Це означає, що змінна типу зчислення оголошується та використовується так само як і змінна будь-якого примітивного типу (int, float, char, …).
Змінна obj може отримувати значення з множини констант, що оголошені у зчисленні EnumName, наприклад
obj = EnumName.constant1;
У мові Java зчислення може оперувати константами типів з плаваючою комою (float, double).
⇑
2. Приклади програм, що використовують зчислення
2.1. Оголошення та використання найпростішого зчислення. Визначення назви місяця року
Умова задачі. Оголосити зчислення Months, яке містить перелік констант, що відповідають скороченій назві місяця року. У демонстраційній програмі забезпечити ввід номер місяця (1..12) та вивід відповідної константи з екземпляру зчислення.
Розв’язок.
Для вводу номера місяця з клавіатури у програмі використовуються можливості класу Scanner.
Лістинг програми, що розв’язує дану задачу, наступний
import java.util.Scanner; // Зчислення, що містить константи, які // зв'язані з місяцями року enum Months { Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec } public class TrainEnumerations { public static void main(String[] args) { // Зчислення // 1. Оголосити змінну типу зчислення Months Months mn = Months.Jan; // 2. Ввести номер місяця з клавіатури System.out.print("month = "); Scanner input = new Scanner(System.in); int numMonth = input.nextInt(); // 3. На основі номеру місяця присвоїти // відповідне значення зчисленню mn switch (numMonth) { case 1: mn = Months.Jan; break; case 2: mn = Months.Feb; break; case 3: mn = Months.Mar; break; case 4: mn = Months.Apr; break; case 5: mn = Months.May; break; case 6: mn = Months.Jun; break; case 7: mn = Months.Jul; break; case 8: mn = Months.Aug; break; case 9: mn = Months.Sep; break; case 10: mn = Months.Oct; break; case 11: mn = Months.Nov; break; case 12: mn = Months.Dec; break; default: System.out.println("Incorrect input"); return; } // 4. Вивести назву константи, що відповідає введеному номеру місяця System.out.println(mn); } }
Тестовий приклад
month = 8 Aug
⇑
2.2. Використання імені зчислення в операторі switch
Даний приклад демонструє використання екземпляру зчислення для керування оператором switch.
Умова задачі. Задано зчислення Seasons, яке оголошує чотири пори року. Реалізувати ввід з клавіатури номеру пори року (1..4). На основі номеру пори року обчислити тривалість пори року у днях. Вважати, що рік невисокосний.
Розв’язок.
import java.util.Scanner; // Зчислення, що описує пори року enum Seasons { Spring, Summer, Autumn, Winter } public class TrainEnumerations { public static void main(String[] args) { // Використання зчислення в операторі switch // 1. Оголосити екземпляр типу Seasons Seasons season; // 2. Ввести номер пори року System.out.print("Season (1..4) = "); Scanner inStr = new Scanner(System.in); int numSeason = inStr.nextInt(); // 3. Отримати значення константи на основі номеру пори року switch (numSeason) { case 1: season = Seasons.Spring; // весна break; case 2: season = Seasons.Summer; // літо break; case 3: season = Seasons.Autumn; // осінь break; case 4: season = Seasons.Winter; // зима break; default: System.out.println("Incorrect input."); return; } // 4. Обчислити кількість днів у порі року // на основі значення season. // Використати оператор switch. System.out.println("season = " + season); int nDays = 0; switch (season) { case Spring: nDays = 92; break; case Summer: nDays = 92; break; case Autumn: nDays = 91; break; case Winter: nDays = 90; break; } // 5. Вивести результат System.out.println("Number of days = " + nDays); } }
Тестовий приклад
Season (1..4) = 2 season = Summer Number of days = 92
⇑
3. Метод values(). Отримати константи зчислення у вигляді масиву
Метод values() дозволяє конвертувати перелік іменованих констант зі зчислення у масив. Загальна форма методу наступна
public static enum_type [] values()
тут enum_type – тип зчислення, константи якого потрібно конвертувати в масив.
Приклад.
У прикладі з допомогою функції values() отримується масив значень констант зі зчислення Days, яке описує дні тижня.
import java.util.Scanner; // Зчислення. // Перелік днів тижня enum Days { Sun, Mon, Tue, Wed, Thu, Fri, Sat } public class TrainEnumerations { public static void main(String[] args) { // Метод values() // 1. Отримати значення констант у вигляді масиву Days arrayDays[] = Days.values(); // 2. Вивести елементи масиву arrayDays for (int i=0; i<arrayDays.length; i++) { System.out.println(arrayDays[i]); } } }
Результат виконання програми
Sun Mon Tue Wed Thu Fri Sat
⇑
4. Метод valueOf(). Конвертувати рядкове представлення константи у значення зі зчислення
Метод valueOf() дозволяє отримати представлення константи зі зчислення у вигляді рядка. Загальна форма методу наступна
public static enum_type valueOf(String str)
тут
- enum_type – тип зчислення;
- str – рядкове представлення константи зі зчислення enum_type.
Приклад.
У прикладі демонструється використання методу valueOf() для отримання значення константи зі зчислення Days.
import java.util.Scanner; // Зчислення. // Перелік днів тижня enum Days { Sun, Mon, Tue, Wed, Thu, Fri, Sat } public class TrainEnumerations { public static void main(String[] args) { // Метод valueOf() // Ввести рядок назви дня System.out.print("Day = "); Scanner inStr = new Scanner(System.in); String strDay = inStr.next(); // рядок з назвою дня // Отримати значення константи Days day; day = Days.valueOf(strDay); // Вивести отримане значення константи зі зчислення day System.out.println(day); } }
Тестовий приклад
Day = Fri Fri
⇑
Споріднені теми
- Використання зчислень як класів. Приклади оголошення зчислень, що містять конструктори, внутрішні поля, методи
- Клас Enum. Методи класу Enum: clone(), compareTo(), getDeclaringClass(), hashCode(), name(), ordinal(), toString()
⇑