我正在制作RPN计算器,我已经完成了将中缀转换为postfix的部分,现在我想在postfix中评估表达式。
例如: 转换自((3 + 5 1)= 8)14到3 5 1 +8 = 14(我已经这样做了)。现在评估后一种表达方式。 我的指示:
给出一个postx表达式v 1 ::: v n, 其中v i是操作数或运算符, 以下算法评估表达式。辅助字符串temp2是 在计算过程中使用。
而我< = n
如果v_i是操作数:将v_i推送到tmp2。
如果v_i是 运算符:将v_i应用于tmp2的前两个元素。更换 这些都是tmp2的结果。
我的代码:
static int eval(String postfix) {
int result = 0;
String temp2 = "";
int num1, num2;
char operator;
for (int i = 0; i < postfix.length(); i++) {
char M = postfix.charAt(i);
// if v_i is an operand: Push v_i to tmp2.
if (Character.isDigit(postfix.charAt(i))) {
temp2 = M + temp2;
}
/*
* if v_i is an operator: Apply v_i to the top two elements of tmp2.
* Replace these by the result in tmp2.
*/
if (postfix.charAt(i) == '+' || postfix.charAt(i) == '-' || postfix.charAt(i) == '*'
|| postfix.charAt(i) == '/') {
temp2 = M + temp2.substring(2);
num1 = Character.getNumericValue(temp2.charAt(temp2.length() - 1));
operator = postfix.charAt(i);
num2 = Character.getNumericValue(temp2.charAt(temp2.length() + i - 1));
switch (operator) {
case '+':
result = num1 + num2;
break;
case '-':
result = num1 - num2;
break;
case '*':
result = num1 * num2;
break;
case '/':
result = num1 / num2;
break;
}
}
}
return result;
}
我得到了
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 2
在:
num2 = Character.getNumericValue(temp2.charAt(temp2.length() + i - 1));