【问题标题】:Evaluating an math expression in Postfix (RPN) Java. No stack, only strings在 Postfix (RPN) Java 中评估数学表达式。没有堆栈,只有字符串
【发布时间】:2015-09-16 02:00:04
【问题描述】:

我正在尝试使用子程序来理解以下指令:

i = 1

而我

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

如果 v_i 是一个运算符:将 v_i 应用于 tmp2。将这些替换为 tmp2 中的结果。

i = i + 1 tmp2 的输出结果。

所以基本上我正在尝试以后缀(RPN)形式计算一些表达式。在这里,我希望每当数字是要转移到 tmp2 的操作数(数字),并且当有运算符时,它会被 tmp2 中的值替换。例如3 5 1 +8 / 14* = 14

其他问题:无论我写什么,我都会收到“线程“main”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;
}

【问题讨论】:

  • 你不能在没有堆栈的情况下评估 postfix 或任何其他类型的 -fix。不清楚你在问什么。您是否希望以某种方式将字符串用作堆栈?如果有,为什么?

标签: java regex infix-notation calc rpn


【解决方案1】:

这意味着您正在尝试访问 char 数组之外的字符,即 char 数组的长度为 10,并且您正在尝试获取第 11 个字符。

解决您的问题的更好方法是首先使用 String.split 或 StringTokenizer StringTokenizer 标记您的表达式,然后遍历每个标记:

  • 如果令牌是推入Stack 的操作数--Java 有一个 Stack 类,所以使用它。
  • 如果 token 是运算符,则从堆栈中弹出操作数并执行操作,然后将答案推回堆栈。

【讨论】:

  • 谢谢!但赋值的重点是使用字符串操作。
  • 我认为 String.split 或 StringTokenize 是操作字符串的方法。如果您必须遍历每个字符而不使用 Stack 来评估您的表达式,那么我认为您是在浪费时间。没有一个心智正常的人会期望你这样做。
猜你喜欢
  • 2016-01-10
  • 2017-05-17
  • 2012-05-29
  • 2015-01-01
  • 2015-02-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-18
相关资源
最近更新 更多