如何在java中编写算法来用括号计算算术表达式

时间:2013-09-02 11:57:33

标签: java algorithm data-structures stack postfix-notation

我理解如何编写没有括号的java算法。

  1. 创建两个堆栈:操作数堆栈和操作员堆栈。
  2. 当我们读取表达式时,请继续将运算符添加到一个表达式中,并将操作数添加到另一个表达式中。
  3. 优先级较低的运算符不能存储在优先级较高的运算符上。在这种情况下,我们弹出该运算符并应用于Operand堆栈中的顶级操作数并保持 结果到位了。
  4. 但如果它涉及像[] or {} or ()这样的括号。评估表达式的逻辑是什么?例如

    ([12*3] + (8/2)) + (5+5)/(4*2)-3+(7-3)
    

2 个答案:

答案 0 :(得分:3)

你在Dijkstra的shunting-yard algorithm描述了一个奇怪的变体。 Dijkstra的版本在过去的50年里一直是常态,它处理分组操作(括号,括号,等。)就好了。

答案 1 :(得分:0)

评估算术表达式的常用方法是开发或查找算术表达式的语法,例如,请参阅此处http://www.csse.monash.edu.au/~lloyd/tildeProgLang/Grammar/Arith-Exp/,然后编写“递归下降解析器”代码。这些程序的结构非常接近语法。一旦你看到一个,你会欣赏这种方法。