栈的应用计算器(多位数)
表达式 1722-5+1-5+3-14 结果是多少,代码实践出真知。
代码
代码不难,但也不简单,注释里每句都有详解,以及自己对其的逻辑算法理解,仔细看
手敲,全注释,感兴趣看一下前几次的更新
package stack;
public class Calculator {
public static void main(String[] args) {
// TODO Auto-generated method stub
String expression = "17*2*2-5+1-5+3-14"; //如何处理多位数的问题?
//创建两个栈,数栈,一个符号栈
ArrayStack2 numStack = new ArrayStack2(10);
ArrayStack2 operStack = new ArrayStack2(10);
//定义需要的相关变量
int index = 0;辅助指针,扫描expression
int num1 = 0;
int num2 = 0;
int oper = 0;
int res = 0;
char ch = ' '; //将每次扫描得到char保存到ch
String keepNum = ""; //用于拼接 多位数
//开始while循环的扫描expression
while(true) {
//依次得到expression 的每一个字符
ch = expression.substring(index, index+1).charAt(0);
//charAt(0)将字符串转化为char substring方法从index开始到index+1
//判断ch是什么,然后做相应的处理
if(operStack.isOper(ch)) {
//如果是运算符
//判断当前的符号栈是否为空
if(!operStack.isEmpty()) {
//如果符号栈有运算符,进行比较,如果当前运算符的优先级小于或等于栈顶的运算符
// 数值栈pop出俩个数,符号栈pop出一个符号,进行运算,将得到的结果人数值栈,当前符号入符号栈
if(operStack.priority(ch) <= operStack.priority(operStack.peek()))