package eighty;
import java.util.Scanner;
import java.util.Stack;
public class Eighty {
public static void main(String[] args) {
//利用两个堆栈实现计算
String str = "(1+((2+3)*(4*5)))";
System.out.println(str);
Stack<Character> s1 = new Stack<>();//用于存放字符,即运算符号
Stack<Double> s2 = new Stack<>(); //用于存放数字,即需要计算的各个数字
char[] c1 = new char[100]; //新建字符数组
c1 = str.toCharArray(); //将字符串转化为字符的形式存放在数组中
for (char c : c1) {
if(c == '(')
continue; //如果是左扩括号就忽略不管
if(c=='+')
s1.add(c);
if(c=='-')
s1.add(c);
if(c=='*')
s1.add(c);
if(c=='/')
s1.add(c); //如果是其他符号就入到符号的栈里面
if(c == ')') { //遇到右括号,表示一个小括号的终结,必须要进行一轮运算
double d1 = s2.pop();
double d2 = s2.pop();
char c3 = s1.pop();
if(c3=='+') {
double d3 = d1+d2;
s2.push(d3);
}
if(c3=='-'){
double d3 = d1-d2;
s2.push(d3);
}
if(c3=='*'){
double d3 = d1*d2;
s2.push(d3);
}
if(c3=='/'){
double d3 = d1/d2;
s2.push(d3);
}
}
if(c >= 48 && c <= 57) { //如果是数字,就利用ASCII码表把其转化为数字,压入数字的栈中
double e = c-48;
s2.push(e);
}
}
System.out.println(s2.pop());
}
}