栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

四则运算Java实现

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

四则运算Java实现

package cn.loosing.demo;
import java.util.*;
public class Test20210323_1 {
    // 运算符优先级map
    private static final Map OPT_PRIORITY_MAP = new HashMap() {
        private static final long serialVersionUID = 6968472606692771458L;

        {
            put('(', 0);
            put('+', 2);
            put('-', 2);
            put('*', 3);
            put('/', 3);
            put(')', 7);
        }
    };
    public static void main(String[] args) {
        String expr = "7*(2+3)*((((2+1))))";
        System.out.println(expr);
        Stack symbolStack = new Stack<>(); // 符号
        Stack optStack = new Stack<>(); // 运算
        List rpnList = new ArrayList<>(); //rpnList
        StringBuilder curNumBuilder = new StringBuilder(16); // 当前正在读取中的数值字符追加器
        
        expr.replaceAll(" ", "").chars().forEach(cht -> {
            char ch = (char) cht;
            if (!OPT_PRIORITY_MAP.containsKey(ch)) {
                curNumBuilder.append(ch);
                return;
            }
            if (curNumBuilder.length() != 0) {
                rpnList.add(curNumBuilder.toString());
                curNumBuilder.delete(0, curNumBuilder.length());
            }
            if (ch == '(')
                symbolStack.push(ch);
            else if (ch == ')')
                while ((ch = symbolStack.pop()) != '(') rpnList.add(String.valueOf(ch));
            else if (symbolStack.isEmpty() || OPT_PRIORITY_MAP.get(ch) > OPT_PRIORITY_MAP.get(symbolStack.lastElement()))
                symbolStack.push(ch);
            else {
                rpnList.add(String.valueOf(symbolStack.pop()));
                symbolStack.push(ch);
            }
        });
        if (curNumBuilder.length() != 0) rpnList.add(curNumBuilder.toString());
        while (!symbolStack.isEmpty()) rpnList.add(String.valueOf(symbolStack.pop()));

        System.out.println(rpnList);
        
        rpnList.forEach(str -> {
            if (!OPT_PRIORITY_MAP.containsKey(str.charAt(0))){
                optStack.push(str);
                return;
            }
            double d2 = Double.valueOf(optStack.pop());
            double d1 = Double.valueOf(optStack.pop());
            switch (str.charAt(0)) {
                case '+':
                    optStack.push(String.valueOf(d1 + d2));
                    break;
                case '-':
                    optStack.push(String.valueOf(d1 - d2));
                    break;
                case '*':
                    optStack.push(String.valueOf(d1 * d2));
                    break;
                case '/':
                    optStack.push(String.valueOf(d1 / d2));
            }
        });
        System.out.println(optStack);
    }
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/345206.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号