两个数组合并后按顺序执行四则运算的方法
将数字与运算符分别存储在两个列表中,按从左到右顺序依次执行四则运算(不考虑优先级),适用于简易计算器场景。该方法实现简单,直接遍历列表计算,支持加减乘除,并提供可直接运行的Java示例代码,适合初学者理解基本计算器逻辑。
本文介绍一种将数字与运算符分别存储在两个列表中,再按从左到右顺序(不考虑优先级)依次计算的简洁实现方法,适用于简易计算器场景,并提供可直接运行的 Java 示例代码,帮助开发者快速掌握操作数按序计算的核心思路。
在开发基础计算器时,常见做法是将数字和运算符分离存储。例如,输入字符串 "10+5*3-2",首先提取出数字列表 ["10", "5", "3", "2"] 和运算符列表 ["+", "*", "-"]。注意,本实现采用严格的从左到右顺序计算——即不遵循数学中乘除优先于加减的规则。这样一来,计算过程等价于 ((10 + 5) * 3) - 2 = 43.0。这正是所谓“操作数按序计算”(operands in order)的核心思路,适合入门级表达式求值场景。
下面直接给出一个简洁的 Java 实现,注释和边界检查都已完善,拿来即可直接运行:
import java.util.*;
public class SimpleCalculator {
/**
* 按从左到右顺序计算:result = ((num0 op0 num1) op1 num2) op2 num3 ...
* @param numbers 非空数字字符串列表(至少含1个元素)
* @param operators 运算符列表,长度应为 numbers.size() - 1
* @return 计算结果
*/
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 numbers count minus one");
}
double result = Double.parseDouble(numbers.get(0));
for (int i = 0; i < operators.size(); i++) {
double nextNum = Double.parseDouble(numbers.get(i + 1));
char op = operators.get(i).charAt(0);
switch (op) {
case '+': result += nextNum; break;
case '-': result -= nextNum; break;
case '*': result *= nextNum; break;
case '/':
if (Math.abs(nextNum) < 1e-10) {
throw new ArithmeticException("Division by zero");
}
result /= nextNum;
break;
default:
throw new IllegalArgumentException("Unsupported operator: " + op);
}
}
return result;
}
// 使用示例
public static void main(String[] args) {
List postNumbers = new ArrayList<>(Arrays.asList("10", "5", "3", "2"));
List postOperators = List.of("+", "*", "-");
double result = evaluate(postNumbers, postOperators);
System.out.println(result); // 输出:43.0
}
}
✅ 关键设计说明:
- 初始值取第一个数字,后续每一轮都用当前结果与下一个数字按对应运算符进行运算,实现高效迭代;
- 运算符列表长度必须严格等于数字列表长度减一,否则逻辑失效——该校验已在代码中显式处理,增强鲁棒性;
- 对除零、非法运算符及输入边界均做了显式校验,有效提升代码的健壮性与可维护性;
- 不支持括号或优先级——如需标准数学表达式解析(例如 10+5*3-2 应得到 23.0),则需改用中缀转后缀(逆波兰)或递归下降解析器等高级方案。
游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。
同类文章
Linux route命令详解:查看与修改IP路由表
route命令源自net-tools工具包,用于查看和修改Linux内核IP路由表,但自2009年起已废弃,现代推荐使用iproute命令。由于历史惯性,route仍在生产环境大量存在,且仅能操作main表,需注意新发行版默认未安装。
Python部署Scikit-learn模型为FastAPI微服务
部署Scikit-learn模型为FastAPI微服务时,需用joblib加载模型,请求体应为二维数组,并添加输入校验(类型转换、维度检查、NaN过滤),生产环境使用uvicorn多worker启动,配合错误处理与日志记录,确保服务稳定高效。
CentOS系统中实现Golang日志自动轮转的配置方法
在CentOS上使用logrotate管理Golang应用日志轮转:安装后编写配置文件,设置每天轮转、保留7份、压缩、不处理空日志,创建新日志权限640;手动测试配置无误后通过cron每日自动执行,实现日志按天切分、压缩与清理。
如何高效解决SQL中IN子句超过1000个元素的限制
针对Oracle等数据库IN子句1000项上限,可通过子查询、分批执行、EXISTS关联子查询等方案突破限制,兼顾查询性能与可维护性,避免字符串拼接反模式,同时提升SQL灵活性与数据库兼容性。
CentOS Java日志记录速度优化与性能提升指南
在CentOS环境下优化Java日志记录速度,需采用Log4j2异步日志解耦业务线程,生产环境日志级别设为WARN或ERROR,配合日志轮转与SSD存储;调整缓冲区大小、简化格式化、优化JVM堆与GC策略,并利用无锁设计避免锁竞争。通过监控工具定位瓶颈,分布式系统可引入集中式日志收集。
- 热门数据榜
相关攻略
2026-07-15 18:52
2026-07-15 18:51
2026-07-15 18:51
2026-07-15 18:51
2026-07-15 18:51
2026-07-15 18:51
2026-07-15 18:51
2026-07-15 18:51
热门教程
- 游戏攻略
- 安卓教程
- 苹果教程
- 电脑教程

