Мне нужна помощь при оценке арифметического выражения (INFIX) через рекурсию. Я сделал дерево, просматривая справа налево (+, - сначала, *,/second). Ошибка:Вычислить арифметическое выражение рекурсивно
Для ввода строки: "2 + 3"
Я не то, что я делаю неправильно. Я надеялся, что кто-то сможет взглянуть на мой метод и указать мне в правильном направлении, пожалуйста. Цените помощь. Вот мой метод.
// recursive method to evaluate an expression given by string s
int evaluateE(String s)
{
String r1;
String r2;
int result = 0;
int i;
for(i = s.length() - 1; i >= 0; i--)
{
if (s.charAt(i) == '+' || s.charAt(i) == '-')
break;
else if (s.charAt(i) == '*' || s.charAt(i) == '/')
break;
}
r1 = s.substring(0, i);
r2 = s.substring(i + 1, s.length());
//Base case
if(!r1.contains("+") && !r1.contains("-") && !r1.contains("*") && !r1.contains("/") &&
!r2.contains("+") && !r2.contains("-") && !r2.contains("*") && !r2.contains("/"))
return Integer.parseInt(s);
switch (s.charAt(i))
{
case '+':
result = evaluateE(r1) + evaluateE(r2);
break;
case '-':
result = evaluateE(r1) - evaluateE(r2);
break;
case '*':
result = evaluateE(r1) * evaluateE(r2);
break;
case '/':
if (Integer.parseInt(r2) == 0) //if denominator is zero
{
System.out.println("Invalid divisor");
System.exit(1);
}
else
result = evaluateE(r1)/evaluateE(r2);
break;
}
return result;
}
Сообщите нам, что вы ожидаете, каков результат и почему он не «работает». Можете ли вы предоставить также несколько тестовых примеров? – JFPicard
Я ввожу выражение INFIX. Я пробую простые вещи, как 2 + 3 + 4. Он говорит, что ошибка в «Для строки ввода:« 2 + 3 » – Brown123
добавить сообщение об ошибке в исходное –