Конвертация римских в арабские и обратно
Пишу калькулятор. Арабские и римские. Арабскими считает верно. Римские просто пишет рядом, не выполняя операцию. Где косячу?
public class Parser {
static String[] OPERATORS = {"+", "-", "*", "/"};
static String[] ARABIC = {"1", "2", "3", "4", "5", "6", "7", "8", "9", "10"};
static String[] ROMAN = {"I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX", "X"};
public Parser() {
}
private int getOperatorIndex(String input) {
int retval = -1;
for (String operator : OPERATORS) {
if (input.contains(operator)) {
retval = input.indexOf(operator);
break;
}
}
return retval;
}
private boolean checkForArabic(String input) {
boolean retval = false;
for (String s : ARABIC) {
if (input.equals(s)) {
retval = true;
break;
}
}
return retval;
}
public boolean checkForRoman(String input) {
boolean retval = false;
for (String s : ROMAN) {
if (input.equals(s)) {
retval = true;
break;
}
}
return retval;
}
public void parse(String input) {
Calculator cal = new Calculator();
int indexOfOperator = getOperatorIndex(input);
if (indexOfOperator != -1) {
String a = input.substring(0, indexOfOperator);
String b = input.substring(indexOfOperator + 1);
String op = input.substring(indexOfOperator, indexOfOperator + 1);
if (checkForArabic(a.trim()) && checkForArabic(b.trim())) {
int aIn = Integer.parseInt(a.trim());
int bIn = Integer.parseInt(b.trim());
int result = cal.calculate(aIn, bIn, op);
System.out.println("Output " + result);
} else if (checkForRoman(a.trim()) && checkForRoman(b.trim())) {
System.out.println("Output" + a + b);
}
else {
throw new ArithmeticException("one of the characters is not arabic or roman!");
}
} else {
throw new ArithmeticException("No operator!");
}
}
public static void main(String[] args) {
}}
Ответы (2 шт):
Автор решения: Igor
→ Ссылка
"Косячите"? А где, собственно, здесь перевод строк с римскими цифрами в числа?
} else if (checkForRoman(a.trim()) && checkForRoman(b.trim())) {
System.out.println("Output" + a + b);
}
Автор решения: fox
→ Ссылка
- создать метод перевода римских цифр к арабским. (X--> 10).
- вычленить из искомого выр-я (пр. "XV + II") римские цифры и воспользоваться п.1.
- создать метод вычислений. (15 + 2).
- создать метод конкатенации ответов (пр. 17 --> XVII).
- и вуаля!!!)))