当前位置: 首页
编程语言
如何用两个数组按顺序执行四则运算的步骤

如何用两个数组按顺序执行四则运算的步骤

热心网友 时间:2026-07-15
转载

针对两个数组分别存储数字与运算符的线性计算场景,提出严格从左到右依次执行的方案。实现时将首个数字作为初始值,遍历运算符与后续数字进行运算,支持加减乘除,需校验运算符数量与数字数量差一,并处理除零异常。

在进行简易计算器开发或表达式求值处理时,常常会遇到这样的需求:手头已有两个数组,一个存放数字,另一个存放运算符,需要按顺序逐一计算出最终结果。听起来简单,但实际编写时,细节处理仍值得深究。

本文所讨论的计算方式,并非我们熟悉的“先乘除后加减”标准数学规则,而是严格从左到右、依次执行的线性计算。例如输入"10+5*3-2",按标准数学规则结果为23;而按此线性规则,它会被解析为((10+5)*3)-2,输出43。两种逻辑各有适用场景,关键在于你的需求决定选择哪种。

下面提供一个清晰、健壮的Java实现方案,可直接用于实际项目。

import ja va.util.*;
public class SequentialCalculator {
    /**
     * 按顺序(左结合)计算数字与运算符列表
     * @param numbers 非空数字字符串列表(至少含1个元素)
     * @param operators 运算符字符串列表(长度 = numbers.size() - 1)
     * @return 计算结果(double)
     */
    public static double evaluate(List numbers, List operators) {
        if (numbers.isEmpty()) {
            throw new IllegalArgumentException("Numbers list cannot be empty");
        }
        if (operators.size() != numbers.size() - 1) {
            throw new IllegalArgumentException(
                "Operators count must be exactly one less than numbers count"
            );
        }
        double result = Double.parseDouble(numbers.get(0));
        for (int i = 0; i < operators.size(); i++) {
            double nextValue = Double.parseDouble(numbers.get(i + 1));
            char op = operators.get(i).charAt(0);
            result = switch (op) {
                case '+' -> result + nextValue;
                case '-' -> result - nextValue;
                case '*' -> result * nextValue;
                case '/' -> {
                    if (nextValue == 0.0) {
                        throw new ArithmeticException("Division by zero");
                    }
                    yield result / nextValue;
                }
                default -> throw new IllegalArgumentException("Unsupported operator: " + op);
            };
        }
        return result;
    }
    // 使用示例
    public static void main(String[] args) {
        List numbers = Arrays.asList("10", "5", "3", "2");
        List operators = Arrays.asList("+", "*", "-");
        double result = evaluate(numbers, operators);
        System.out.println(result); // 输出: 43.0 (即 ((10 + 5) * 3) - 2 = 45 - 2 = 43)
    }
}

核心逻辑说明

本段代码的实现逻辑非常直观:

  • 将第一个数字作为初始结果值;
  • 随后遍历每个运算符,依次将当前结果与下一个数字按照运算符进行计算;
  • 整个过程严格遵循左结合规则,完全忽略运算符优先级。

仍以"10+5*3-2"为例:先计算10+5=15,接着15*3=45,最后45-2=43。这一结果与标准数学运算截然不同,但正是线性计算流的典型特征。

注意事项

使用该方法时,需特别留意以下几个关键点:

  • 数据校验是必不可少的保护机制——operators.size()必须严格等于numbers.size() - 1,否则整个计算逻辑将出现混乱;
  • 除零检查必须提前处理,虽然Java会抛出ArithmeticException,但更优雅的做法是主动捕获并给出明确的错误提示;
  • 字符串转数字采用Double.parseDouble(),天然支持小数运算。若业务场景仅需整数,可替换为Integer.parseInt()并让方法返回int类型;
  • 如果未来需要支持标准运算符优先级(如先乘除后加减),则此线性方案无法满足需求。此时建议采用调度场算法(Shunting Yard)或构建抽象语法树(AST),复杂度会显著提升。

总体而言,该方案的优点在于简洁明了、开箱即用。它非常适合教学级计算器、表达式求值的中间处理步骤,或某些特定协议解析场景。对于希望深入理解运算符绑定与表达式求值流程的开发者来说,这也是一个不错的起点。

来源:https://www.php.cn/faq/2812598.html

游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。

同类文章
更多
Linux route命令详解:查看与修改IP路由表

Linux route命令详解:查看与修改IP路由表

route命令源自net-tools工具包,用于查看和修改Linux内核IP路由表,但自2009年起已废弃,现代推荐使用iproute命令。由于历史惯性,route仍在生产环境大量存在,且仅能操作main表,需注意新发行版默认未安装。

时间:2026-07-15 18:52
Python部署Scikit-learn模型为FastAPI微服务

Python部署Scikit-learn模型为FastAPI微服务

部署Scikit-learn模型为FastAPI微服务时,需用joblib加载模型,请求体应为二维数组,并添加输入校验(类型转换、维度检查、NaN过滤),生产环境使用uvicorn多worker启动,配合错误处理与日志记录,确保服务稳定高效。

时间:2026-07-15 18:51
CentOS系统中实现Golang日志自动轮转的配置方法

CentOS系统中实现Golang日志自动轮转的配置方法

在CentOS上使用logrotate管理Golang应用日志轮转:安装后编写配置文件,设置每天轮转、保留7份、压缩、不处理空日志,创建新日志权限640;手动测试配置无误后通过cron每日自动执行,实现日志按天切分、压缩与清理。

时间:2026-07-15 18:51
如何高效解决SQL中IN子句超过1000个元素的限制

如何高效解决SQL中IN子句超过1000个元素的限制

针对Oracle等数据库IN子句1000项上限,可通过子查询、分批执行、EXISTS关联子查询等方案突破限制,兼顾查询性能与可维护性,避免字符串拼接反模式,同时提升SQL灵活性与数据库兼容性。

时间:2026-07-15 18:51
CentOS Java日志记录速度优化与性能提升指南

CentOS Java日志记录速度优化与性能提升指南

在CentOS环境下优化Java日志记录速度,需采用Log4j2异步日志解耦业务线程,生产环境日志级别设为WARN或ERROR,配合日志轮转与SSD存储;调整缓冲区大小、简化格式化、优化JVM堆与GC策略,并利用无锁设计避免锁竞争。通过监控工具定位瓶颈,分布式系统可引入集中式日志收集。

时间:2026-07-15 18:51
热门专题
更多
刀塔传奇破解版无限钻石下载大全 刀塔传奇破解版无限钻石下载大全
洛克王国正式正版手游下载安装大全 洛克王国正式正版手游下载安装大全
思美人手游下载专区 思美人手游下载专区
好玩的阿拉德之怒游戏下载合集 好玩的阿拉德之怒游戏下载合集
不思议迷宫手游下载合集 不思议迷宫手游下载合集
百宝袋汉化组游戏最新合集 百宝袋汉化组游戏最新合集
jsk游戏合集30款游戏大全 jsk游戏合集30款游戏大全
宾果消消消原版下载大全 宾果消消消原版下载大全
  • 热门数据榜