Java栈计算中缀表达式
一、思路分析
- 给出一个中缀表达式:“3+2*6-2”
- 从左到右依次扫描字符串,当前字符为数字时,直接进数字栈;当前字符为运算符时,若当前运算符栈为空,则直接入栈,否则拿当前运算符与运算符栈顶运算符比较优先级,若当前运算符优先级>=栈顶运算符优先级,则直接入栈,若当前运算符优先级<栈顶运算符优先级,则从数字栈中弹出两个数据且从运算符栈中弹出栈顶运算符,计算结果;将计算结果入数字栈,当前运算符入运算符栈。
- 直到字符串扫描结束,如果运算符栈不为空,则从数字栈中弹出两个数据且从运算符栈中弹出栈顶运算符,计算结果;将计算结果入数字栈,当前运算符入运算符栈。
- 此时,数字栈中剩余的一个数就是表达式的结果。
二、代码如下:
package com.stack;
public class Calculator {
public static void main(String[] args) {
String expression = "30+2*6/2";
ArrayStack2 numStack = new ArrayStack2(10);
ArrayStack2 operStack = new ArrayStack2(10);
int index = 0;
int num1 = 0;
int num2 = 0;
int oper = 0;
int res = 0;
char ch = ' ';
String keepNum = "";
while (true) {
ch = expression.charAt(index);
if (ArrayStack2.isOper(ch)) {
if (operStack.isEmpty()) {
operStack.push(ch);
} else {
if (ArrayStack2.priority(ch) <= ArrayStack2.prio