Я пытаюсь сделать некоторый смысл следующих инструкций, используя подпрограмму:Оценка математического выражения в Postfix (RPN) Java. Нет стека, только строки
я = 1
в то время как я < = п
если v_i является операнд: принудительную v_i - tmp2.
Если v_i является оператором: Примените v_i к двум верхним элементам tmp2. Замените их результатом tmp2.
i = i + 1 Результат вывода из tmp2.
Так что в основном я пытаюсь вычислить некоторое выражение в форме postfix (RPN). Здесь я хочу, чтобы всякий раз, когда цифра является операндом (числом), который должен быть передан в tmp2, и когда оператор возвращает его за счет таузера в tmp2. например 3 5 1 +8/14 * = 14
Другие проблемы: что бы я ни писал, я получаю сообщение об ошибке «Исключение в потоке» главной «java.lang.StringIndexOutO ....». v_i - это цифра или оператор или круглые скобки.
СПАСИБО В РАМКАХ!
Мой код:
static int eval(String postfix){
int result = 0;
String temp2 ="";
for (int i=0 ; i<postfix.length(); i++) {
if (postfix.charAt(i) !=')' && postfix.charAt(i)!= '(' && postfix.charAt(i)!= p(infix.charAt(i)))
temp2 += postfix.charAt(i);
int num1,num2;
char operator;
do {
i++;
} while (Character.isDigit(postfix.charAt(i)));
num1 = Integer.parseInt(postfix.substring(0,i));
operator = postfix.charAt(i++);
num2 = //Double.parseDouble(expression.substring(i));
Integer.parseInt(postfix.substring(i+1));
result = num1 + num2;
result = num1 - num2;
result = num1 * num2;
result = num1/num2;
switch (operator) {
case '+' : result = num1 + num2; break;
case '-' : result = num1 - num2; break;
case '*' : result = num1 * num2; break;
case '/' : result = num1/num2; break;
}
}
return result;
}
Вы не можете оценить постфикс или любой другой тип -fix без стека. Неясно, что вы спрашиваете. Ожидаете ли вы каким-то образом использовать строку в виде стека? Если да, то почему? – EJP