Перевод римской цифры с помощью Enum

Рейтинг: 0Ответов: 2Опубликовано: 29.04.2023

Подскажите, как можно перевести римскую цифру, введённую с консоли (I или II или III или IV), которая находится в массиве strings[0] через enum?

import java.util.Scanner;

public class Test {
    public static void main(String[] args) {
            Scanner scanner = new Scanner(System.in);
            String str1 = scanner.nextLine();
            String[] strings = str1.split(" ");
            String g= strings[0];
           
            //??? чтобы вывести перевод из массива, с помощью enum
            Roma perevod = Roma.III;//????   g
            System.out.println(perevod.getTranslation());
        }
    }
    enum Roma {
        I(1), II(2), III(3), IV(4);
        private int translation;
        Roma(int translation){
            this.translation = translation;
        }
        public int getTranslation() {
            return translation;
        }
}

Ответы

▲ 1

Для получения члена enum-а по имени служит метод valueOf():

public class Main {
    public static void main(String[] args) {

        Roma one = Roma.valueOf("I");
        Roma two = Roma.valueOf("II");
        Roma three = Roma.valueOf("III");
        Roma four = Roma.valueOf("IV");

        List<Roma> romas = List.of(one, two, three, four);
        List<Integer> numbers = List.of(one.getTranslation(), two.getTranslation(), three.getTranslation(), four.getTranslation());

        System.out.println(romas);
        System.out.println(numbers);
    }
}

Результат:

[I, II, III, IV]
[1, 2, 3, 4]

В случае, если не найдётся члена enum-а с заданным именем, будет брошено исключение IllegalArgumentException.

Roma one = Roma.valueOf("hello");

Результат:

Exception in thread "main" java.lang.IllegalArgumentException: No enum constant Roma.hello

В соответствии с вашим комментарием (к вопросу) дополняю ответ, как можно при таком enum-е получить римскую цифру из обычной.

Не знаю, может быть, можно как-то иначе, но мне с ходу приходит в голову вариант получить все возможные члены enum-а посредством метода values(), а затем проходиться по полученному массиву и смотреть, у какого члена есть заданный number:

public class Main {
    public static void main(String[] args) {

        int number = 4;
        Roma[] romas = Roma.values();
        Roma found = null;
        for (Roma roma : romas) {
            if (roma.getTranslation() == 4) {
                found = roma;
            }
        }
        System.out.println(found);
    }
}

Результат:

IV
▲ 0

Каждый enum получает метод для преобразования строк в значения. Enum.valueOf:

... for a particular enum type T, the implicitly declared public static T valueOf(String) method on that enum may be used ...

            // ...
            Roma perevod = Roma.valueOf(g);
            // ...