package com.example.lib;
import java.util.Stack;
public class MyClass {
//符号栈
static Stack<String> ops = new Stack<>();
//数字栈
static Stack<Double> val = new Stack<>();
public static void main(String[] args) {
String str = "(1+2)*(2*3)";
// String str="1+2";
//转换为数组
String[] strArray = str.split("");
//对数据进行计算
opsCheck(strArray);
//前一步运行完后ops里剩一个栈未运算,val剩两个数据未计算
valCheck(ops.pop());
System.out.println(val.pop());
}
private static void opsCheck(String[] strArray) {
for (int i = 0; i < strArray.length; i++) {
switch (strArray[i]) {
case "(":
break;
case "+":
case "-":
case "*":
case "/":
ops.push(strArray[i]);
break;
case ")":
valCheck(ops.pop());
break;
default:
val.push(Double.parseDouble(strArray[i]));
break;
}
}
}
private static void valCheck(String str) {
Double vals = val.pop();
switch (str) {
case "+":vals=val.pop()+vals;break;
case "-":vals=val.pop()-vals;break;
case "*":vals=val.pop()*vals;break;
case "/":vals=val.pop()/vals;break;
default:break;
}
val.push(vals);
}
}