对于一个带有括号的算数表达式来说,麻烦的点在于对于括号的处理,在这里我们使用两个栈分别存储运算符和数值然后再对于相应的情况进行处理。
简单方便起见我们假设表达式中没有省略任何括号。
对于表达式我们根据四种情况从左到右送入栈中:
1.将操作数送入操作数栈。
2.将运算符压入运算栈。
3.忽略左括号
4.遇到右括号时,弹出相应运算符合所需运算数,将其结果压入操作数栈中
其核心代码如下:
- package demo2;
- import java.util.Scanner;
- import java.util.Stack;
- /**
- * @description:
- * @author: zhonghu
- * @date: 2019-02-10 15:29
- */
- public class Evaluate {
- public static void main(String[] args) {
- //ops栈存放操作数
- Stack ops=new Stack<>();
- //vals栈存放数
- Stack vals=new Stack<>();
- Scanner sc=new Scanner(System.in);
- System.out.println("请输出表达式");
- String str=sc.nextLine();
- String[] ch=str.split("");
- for(int i=0;i