希望各位大佬指正
需求:求解表达式3+2*60-2的值
思路分析:
1. 表达式是一个中缀表达式,关于什么事中缀表达式,请访问(前缀、中缀、后缀表达式_云乐仙er的博客-CSDN博客_前缀中缀后缀表达式前缀、中缀、后缀表达式_云乐仙er的博客-CSDN博客_前缀中缀后缀表达式前缀、中缀、后缀表达式_云乐仙er的博客-CSDN博客_前缀中缀后缀表达式);、
2.将表达式进行扫描,需要一些变量
int index = 0;//用于扫描 int num1 = 0;//存放数据 int num2 = 0;//存放数据 int oper = 0;//用于存放符号 int res = 0;//用于存放结果 char ch = ' ';//每次扫描得到的char保存到ch
3.需要两个栈,一个是numStack存储数字,另一个是operStack来存储符号。
//创建两个栈,数栈,符号栈 ArrayStack2 numStack = new ArrayStack2(10); ArrayStack2 operStack = new ArrayStack2(10);
4.使用while(true)死循环扫描表达式,对每个字符进行判断
//依次得到expression的每一个字符 ch = expression.charAt(index);
4.1如果取到的字符为运算符(+,-,*,/)
if (operStack.isOper(ch))
4.1.1 判断operStack是否为空,如果为空,直接将ch入符号栈operStack
if (operStack.isEmpty())
operStack.push(ch);
4.1.2如果operStack不为空,判断现在的ch与operStack栈顶的运算符的优先级
4.1.2.1如果现在的ch比operStack栈顶的运算符的优先级小或相等,就需要从numStack中pop出两个值、operStack中pop出一个值,进行运算。并将运算结果push到numStack,当前的ch加入到operStack中。
if (operStack.priority(ch) <= operStack.priority(operStack.peek())) { //从数栈中pop出两个数 num1 = numStack.pop(); num2 = numStack.pop(); //从符号栈中pop出一个符号 oper = operStack.pop(); //进行运算, res = numS