字符串索引超出范围:2。在Postfix表达式样式中进行计算。

时间:2015-09-19 15:34:19

标签: java regex string indexing calculator

我正在制作RPN计算器,我已经完成了将中缀转换为postfix的部分,现在我想在postfix中评估表达式。

例如: 转换自((3 + 5 1)= 8)14到3 5 1 +8 = 14(我已经这样做了)。现在评估后一种表达方式。 我的指示:

给出一个postx表达式v 1 ::: v n, 其中v i是操作数或运算符, 以下算法评估表达式。辅助字符串temp2是 在计算过程中使用。

  • i = 1
  • 而我< = n

  • 如果v_i是操作数:将v_i推送到tmp2。

  • 如果v_i是    运算符:将v_i应用于tmp2的前两个元素。更换    这些都是tmp2的结果。

  • i = i + 1
  • 来自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));

0 个答案:

没有答案