前缀/中缀/后缀表达式;

前缀后缀中缀表达式:

 

 

 

 

 

 

 

 

 

 

 

 后缀表达式的代码实现:

package Demo1.stackArray;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Stack;

public class PolandNocation {
    //后缀表达式:逆波兰表达式
    public static void main(String[] args) {
        //创建一个表达式(3+4)*5-6 = 29
        String suffixExpression = "3 4 + 5 * 6 -";

        for (int i = 0; i < suffixExpression.length(); i++) {

        }
        //切割表达式,存入集合
        PolandNocation polandNocation = new PolandNocation();
        List<String> list = polandNocation.getArray(suffixExpression);
        //  list.forEach(System.out::print);
        System.out.println(list);

        //计算
        System.out.println();
        try {
            int calculate = polandNocation.calculate(list);
            System.out.println("计算的结果是:--》" + calculate);
        } catch (Exception e) {
            System.out.println(e.getMessage());
        } finally {
            System.out.println("退出");
        }

    }

    //压栈
    public int calculate(List<String> lis) {
        //构建一个栈
        Stack<String> stack = new Stack<>();
        for (String item : lis) {
            if (item.matches("\\d+")) {//匹配多位数
                stack.push(item);
            } else {
                int num2 = Integer.parseInt(stack.pop());
                int num1 = Integer.parseInt(stack.pop());
                int result = 0;
                if (item.equals("+")) {
                    result = num1 + num2;
                } else if (item.equals("-")) {
                    result = num1 - num2;
                } else if (item.equals("*")) {
                    result = num1 * num2;
                } else if (item.equals("/")) {
                    result = num1 / num2;
                } else {
                    throw new RuntimeException("运算符!!!异常");
                }
                stack.push("" + result);
            }
        }
        return Integer.parseInt(stack.pop());
    }

    //切割字符串(),存入集合(ArrayList)
    public List<String> getArray(String suffixExpression) {
        //把数据切割装入ArrayList
        ArrayList<String> arrayList = new ArrayList<>();
        String[] split = suffixExpression.split(" ");
        for (String number : split) {
            arrayList.add(number);
        }
        return arrayList;

    }
}

 

posted on 2020-08-08 12:27  白嫖老郭  阅读(197)  评论(0编辑  收藏  举报

导航