Как сделать, чтобы ELSE срабатывал после выполнения всего цикла FOR?
В данном случае ELSE срабатывает сразу после первой итерации, что неприемлемо.
class Roman {
public String numRo(String s) throws Rss_Exception {
String[] arabsk = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10"};
for (int j = 0; j < arabsk.length; j++) {
}
String[] rimsk = {"I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX", "X"};
for (int n = 0; n < rimsk.length; n++) {
if (s.equals(rimsk[n])) {
s = arabsk[n + 1];
} else {
throw new Rss_Exception("ERROR");
}
}
return s;
}
}
Ответы (2 шт):
Автор решения: Igor
→ Ссылка
for (int n = 0; n < rimsk.length; n++) {
if (s.equals(rimsk[n])) {
return arabsk[n + 1];
}
}
throw new Rss_Exception("ERROR");
Автор решения: Дмитрий
→ Ссылка
Вам здесь циклы не нужны в принципе.
public class Roman {
private final static String[] ROMAN_NUMBER = {"I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX", "X"};
public static String convert(String number) {
try {
return ROMAN_NUMBER[Integer.valueOf(number.trim()) - 1];
} catch (NullPointerException | NumberFormatException | ArrayIndexOutOfBoundsException e) {
throw new RuntimeException("Number " + number + " not found");
}
}
}
Или в двух направлениях с использованием BiMap (https://mvnrepository.com/artifact/com.google.guava/guava/31.0.1-jre):
import com.google.common.collect.BiMap;
import com.google.common.collect.ImmutableBiMap;
public class Roman {
private final static BiMap<String, String> ROMAN_NUMBER = new ImmutableBiMap.Builder<String, String>()
.put("1", "I")
.put("2", "II")
.put("3", "III")
.put("4", "IV")
.put("5", "V")
.put("6", "VI")
.put("7", "VII")
.put("8", "VIII")
.put("9", "IX")
.put("10", "X")
.build();
public static String toRoman(String number) {
return ROMAN_NUMBER.get(number);
}
public static String fromRoman(String number) {
return ROMAN_NUMBER.inverse().get(number);
}
}