1.实现思路
遍历表达式。碰到数字将其放到栈中。 遇到计算符 ,从栈中弹出两个数用计算然后再从新入栈。a 在栈中的最后一个数即为结果、
2.效果
转换前:
2 * ( 9 + 6 / 3 - 5 ) + 4
转换后:
2963 / + 5 - * 4 +
-- -- -- -- -- -- -- -- -- -- -
使用逆波兰计算结果为: 16.0
3.实现代码
public class RPNCalculator {
public double Calculator ( List< String> expressionSuffix) {
Stack< String> stack = new Stack < String> ( ) ;
for ( int i = 0 ; i < expressionSuffix. size ( ) ; i++ ) {
if ( this . isOperator ( expressionSuffix. get ( i) ) ) {
double d = this . compute ( Double. parseDouble ( stack. pop ( ) ) , Double. parseDouble ( stack. pop ( ) ) , expressionSuffix. get ( i) ) ;
stack. push ( Double. toString ( d) ) ;
continue ;
}
stack. push ( expressionSuffix. get ( i) ) ;
}
return Double. parseDouble ( stack. pop ( ) ) ;
}
private boolean isOperator ( String v) {
if ( v. equals ( "(" ) || v. equals ( ")" ) || v. equals ( "+" ) || v. equals ( "-" ) || v. equals ( "*" ) || v. equals ( "/" ) ) {
return true ;
}
return false ;
}
private double compute ( double v1, double v2, String ope) {
switch ( ope) {
case "+" :
return v1 + v2;
case "-" :
return v2 - v1;
case "*" :
return v1 * v2;
case "/" :
return v2 / v1;
default :
throw new RuntimeException ( "运算符有误" ) ;
}
}
}