输入字符串“(10+20/2*3)/2+8”计算结果
1.首先我们要将“(10+20/23)/2+8”变成
“(,10,+,20,/,2,,3,),/,2,+,8”
2.建两个栈,一个用于操作符(+,-,…)的入栈出栈(栈op)
一个用于数值的入栈出栈(栈nu)
3.操作符出栈入栈规则:
- 如果栈op为null直接进栈
- 如果栈op的栈顶为“(”直接进栈
- 如果栈op的栈顶为操作符如“+”等,我们就判断要进栈的操作符的优先级****是否大于栈顶的操作符优先级,
如果大于就进栈;否者就弹出栈顶操作符,直到栈顶操作符优先级小于就进栈操作符优先级。 - 如果进栈的操作符是“)”就一直将栈顶的操作符弹出;直到栈顶的操作符为“(”结束;
- 最后判断栈op是否为空,如果不是就一直弹出栈顶;
3.数字出栈入栈规则:
- 如果是数字直接进栈
- 如果栈op有弹出的操作符 “?”,那么栈nu就要 连续弹出栈“n1”和n2(n1比n2先弹出),通过某个函数进行计算(n2 ? n1),结果再进入栈nu;
中缀表达式计算(入栈出栈过程)
部分代码(有需要全部代码联系我)
public static void main(String[] args) {
String expression = "(10+20/2*3)/2+8";
try {
int result = expreess(expression);
System.out.println(result);
}catch(Exception e){
System.out.println("error!");
}
}
private static int expreess(String expression) {
ArrayStatck<