Перевод римской цифры с помощью Enum
Подскажите, как можно перевести римскую цифру, введённую с консоли (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;
}
}
Ответы (2 шт):
Каждый 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);
// ...
Для получения члена 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