java编写一个计算器

本篇博客来用java编写一个计算器,来计算一个算数表达式,这个表达式支持加减乘除和任意层次的括号嵌套(仅支持圆括号)。

思路设计

首先讨论一下思路。假设有一个算数表达式为(2 + 1) + 200 * 3.2 / (5 * (2 + 6 )),我们首先需要按照优先级先计算最内层括号内的表达式,然后再计算外层括号的,直到演化为一个不含括号的普通加减乘除表达式,最终得出一个结果。

代码设计:
子过程:computeFlatExp(String flatExp)函数用来计算一个不含括号的加减乘除表达式,它先轮训计算乘和除,再轮训计算加和减,直到得出最终结果。

主流程:,不断地发现闭合的括号,然后调用computeFlatExp()函数计算字表达式的结果,从而简化算数表达式,直到简化为算数表达式不包含括号位置,最后在调用一次computeFlatExp()函数得出最终结果

代码及分析

下面来看下具体代码的实现。先来看下computeFlatExp()

computeFlatExp()子过程

private double computeFlatExp(String flatExp) {
    // 先递归计算所有乘法和除法
    Pattern pattern = Pattern.compile("(?<num1>[\\d\\.]+)\\s*(?<operator>[\\*/])\\s*?(?<num2>[\\d\\.]+)");
    Matcher matcher = pattern.matcher(flatExp);
    while (matcher.find()) {
        double num1 = Double.parseDouble(matcher.group("num1"));
        double num2 = Double.parseDouble(matcher.group("num2"));
        String operator = matcher.group("operator");
        double result = operator.contains("*") ? num1 * num2 : num1 / num2;
        flatExp = flatExp.replace(matcher.group(0), String.valueOf(result));
        matcher = pattern.matcher(flatExp);
    }

    // 再递归计算所有加法和减法
    pattern = Pattern.compile</
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值