前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >逆波兰表达式计算

逆波兰表达式计算

作者头像
切图仔
发布2022-09-14 16:14:31
4540
发布2022-09-14 16:14:31
举报
文章被收录于专栏:生如夏花绚烂生如夏花绚烂

要求完成一个逆波兰计算器 1.输入一个逆波兰表达式(后缀表达式),使用栈计算其结果 2.支持小括号和多为数整数

思路分析

(3+4)*5-6的逆波兰表达式为3 4 + 5 x 6 - 1.将表达式 3 4 + 5 x 6 - 放到ArrayList中(方便遍历) 2.将ArrayList传递给一个方法,用于计算 3.拿到ArrayList后,从左至右开始遍历,遇到数字直接压入栈 4.遇到运算符,弹出栈顶和次顶的元素,进行计算,将得到的结果再次放入栈中 5.一直重复,直到ArrayList遍历完毕,可得到最终结果

代码实现

代码语言:javascript
复制
public class  Polanexpr{
    public static void main(String[] args) {
        String expr = "3 4 + 5 * 6 - "; //逆波兰表达式 (3+4)*5-6
        List<String> listString = getListString(expr); //将逆波兰表达式转换为List
        int res = cale(listString);
        System.out.println(res);

    }
        //将逆波兰表达式转换为list
    public static List<String> getListString(String expr){
        //将表达式分割成数组
        String[] split = expr.split(" ");
        List<String> list = new ArrayList<String>();
        for(String ele: split){
            list.add(ele);
        }
        return list;

    }
    //表达式计算
    public static int cale(List<String> ls){
        Stack<String> stack = new Stack<String>();
        //遍历 ls
        for(String item: ls){
            //使用正则匹配数值
            if(item.matches("\\d+")){
                //数值直接入栈
                stack.push(item);
            }else{
                //如果是运算符则需在栈中弹出两个数,进行运算
                int num1 = Integer.parseInt(stack.pop());
                int num2 = Integer.parseInt(stack.pop());
                int res = 0;
                switch (item){
                    case "+":
                        res = num1 + num2;
                        break;
                    case "-":
                        res = num2 - num1;
                        break;
                    case "*":
                        res = num1 * num2;
                        break;
                    case "/":
                        res = num2 / num1;
                        break;
                    default:
                        break;
                }
                //运算的结果压入栈中
                stack.push(res+"");
            }
        }
        //最后留在栈中的元素即为结果
        return Integer.parseInt(stack.pop());
    }
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021-02-01 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 思路分析
  • 代码实现
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档