表达式求值

     前段时间呕心沥血的做了个计算器,因新手上路,遇到了很多麻烦,好在上帝保佑,最终得以实现,废话不多讲,进入正题:

     一般情况下,算术表达式总以中缀表达式的形式出现(即运算符总是出现在两个操作数之间,当然,单目运算符除外),而在后缀表达式中,运算符则位于两个操作数后面,并且没有括号,其运算符次序就是其执行计算的次序。本次计算器核心思想就采用中缀转为后缀然后求值来实现。在上代码之前,先简单描述中缀表达式转化为后缀表达式的方法:

1、首先对运算符设置统一的优先级,例如:左括号:2 、加减:3 、乘除:4 、右括号:5 。

2、设置一个运算符栈,按顺序扫描中缀表达式,当输入为操作数的时候就直接将他输入到后缀表达式中。

3、当输入为运算符时,则比较输入运算符和栈顶运算符的优先级,若输入运算符的优先级高于栈顶运算符的优先级,则将运算符入栈,否则,弹出栈顶运算符至后缀表达式,然后重新比较输入运算符和更新后的栈顶运算符的优先级。

4、当输入运算符为“(”时,直接将“(”入栈。

5、当输入预算符为“)”时,将栈顶元素出栈至后缀表达式,直至栈顶为“(”为止,将“(”出栈抛弃,同时也抛弃“)”。

6、中缀表达式扫描完毕,将运算符栈依次出栈至后缀表达式直至栈空。

7、对后缀表达式求值。

以上就是用中缀表达式转为后缀表达式对算术表达式求值的方法。下面是我的代码实现。语言为java,代码实现的是一个图形界面的简单计算器。

代码为calc.java

 

     代码中已有详细的注释,这里就不在多说。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值