Java. Зчислення (enumeration). Ключове слово enum. Приклади

Зчислення (enumeration). Ключове слово enum. Приклади


Зміст


Пошук на інших ресурсах:

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

 


Споріднені теми