如题:下列代码只实现了解析+ - * / ( ) 的简单的四则运算表达式的功能,而且操作符只能是双目的,单目不可以。实现的思路就是:通过逆波尔算法将中缀表达式转换为后缀表达式(其实这里我换成了前缀表达式),然后通过正则表达式匹配结果计算即可。
package Test;
import java.util.Stack;
public interface option {
//opStack:存放操作符的LIFO栈 nbls存放后缀表达式的LIFO栈
void doJob(Stack<Character> opStack, Stack<String> nbls);
//计算两个数值的操作结果
String getResult(String op1, String op2);
}
此上代码声明了两个方法,方法一:逆波尔算法的辅助算法
方法二:计算结果的方法
package Test;
import java.util.HashMap;
import java.util.Map;
import java.util.Stack;
public enum yxjEnum implements option {
// 若当前运算符为'(',直接入栈
LEFT(1) {
public void doJob(Stack<Character> opStack, Stack<String> nbls) {
opStack.push('(');
}
@Override
public String getResult(String op1, String op2) {
// TODO Auto-generated method stub
return null;
}
},
// 若为')',出栈并顺序输出运算符直到遇到第一个'(',遇到的第一个'('出栈但不输出
RIGHT(4) {
public void doJob(Stack<Character> opStack, Stack<String> nbls) {
while (true) {
if (opStack.empty()) {
br