编写一个能够计算中缀表达式的java程序
来源:百度知道 编辑:UC知道 时间:2024/05/05 05:47:10
,其中关于中缀表达式有如下的要求:
1)表达式中可以出现小数
2)表达式中只处理二元运算符
3)表达式中出现的运算符为:+、-、*、/、^(幂运算)、(),其中幂运算符的优先级别比*和/的高,但是其结合性为右结合
1)表达式中可以出现小数
2)表达式中只处理二元运算符
3)表达式中出现的运算符为:+、-、*、/、^(幂运算)、(),其中幂运算符的优先级别比*和/的高,但是其结合性为右结合
基本上就是先做词法分析(Lexical Analysis),然后再依优先级别把所有操作符和相关的操作数逐一化解成数值,
一直到整个表达式被化解成一个数值(或碰上表达式里的格式或数值范围错误)为止。
代码里,tokenize( ) 负责词法分析,剩下的都交给 evaluate( ) 。
evaluate( ) 能正确地求出空格数量和位置不规则的表达式
(比如 " -8-(+ 6*(1.5+723 )--9)+2^+3 ^- 5.2/16 ")。
注:
我没在 evaluate( ) 里捕捉任何异常,因为从里头冒出的任何异常都表示被传入的参数有错误。
(那意味着 evaluate( ) 的调用应该被放在 try block 里。)
import java.util.*;
class Expression {
public static void main( String[ ] args ) {
String expr = " -8-(+ 6*(1.5+723 )--9)+2^+3 ^- 5.2/16 ";
try {
System.out.println( evalua