用栈 模拟简单的计算器
/*
制作计算器的步骤:
1.有两个栈分别存放 数字 和 运算符
2.对于输入的字符串 从头到尾先取数字,将数字入栈、运算符入栈、再将数字入栈、再将运算符入栈。
3.运算符入栈的条件是:1.栈空;2.栈顶的运算符比入栈的运算符优先级低。
4.如果优先级不高于栈顶 就将栈顶的符号取出 然后从取出数字栈中取两个数字,进行计算,计算结果入数字栈
再次判断 入栈的 运算符 是否高于 栈顶的。
5.直到字符串遍历完。再将运算符栈、数字栈中的剩余元素取出计算。最终得到结果
*/
public class Calculator {
public static void main(String[] args) {
String expression = "70*2*2-5+1-500+3-4";
//定义存放数字和运算符的栈
MyStack numStack = new MyStack(10);
MyStack operatorStack = new MyStack(10);
//将字符串入栈
int index = 0;
while (true) {
char ch = '0';
ch = expression.charAt(index);
if (isOperator(ch)) {
//是运算符,要入栈
while (true) {
//防止 * * 后面 + 的情况,需要在检测依次后再检测
if (operatorStack.isEmpty()) {
//栈空,就直接入栈
operatorStack.push(ch);
break;
} else if (priority((char) operatorStack.peek()) < priority(ch))