java - 使用字符串做数学
问题描述
我正在尝试制作一个允许多种运算(例如 4+3-2+5)的计算器。我如何做到这一点的基本想法是使用这个循环:
for (int i = 0; i < nums.length; i++) {
switch (nums[i]) {
case add:
while (func.size() < i) {
func.add(0);
}
func.add(i, 1);
type = "+";
break;
//More cases for other operations
几个注意事项: nums.length 引用一个数组,其中包含输入方程拆分如下:nums = equation.split("(?<=[-+*/%])|(?=[-+*/%])")
理想情况下,一旦我有了“类型”值,我就可以让我的程序通过这样做来计算方程:
for(int i = 1; i < nums.length; i++) {
ans = eq.get(0) type eq.get(func.indexOf(1)+i);
}
另一个小注意事项:eq
是一个包含所有值的数组列表nums
。
我想要做的几乎就是type
变成了数学运算,比如 +、- 等。我知道这段代码在我在这里展示的方式上被严重破坏了,但这只是我快速写的东西,以提供我的例子想要完成。我已经查看了与此类似的其他问题,其中解决方案是使用Math
类并从中调用函数,但它在我的程序中不起作用。有人对实现这一目标的方法有想法吗?谢谢!
解决方案
所以看起来你正在尝试使用语法导向的解释器而不是抽象的解释器。我强烈建议您研究一下,特别是如果您希望您的计算器遵循操作顺序(我假设您这样做)。这是一个很好的例子:
https://lambda.uta.edu/cse5317/notes/node24.html
就个人而言,与其通过将运算符视为分隔符来拆分输入方程,我认为使用手动指定的类构建构造函数会更容易。我将创建由运算符(字符串)和整数参数组成的完整语句表达式开始,然后根据需要添加到它。就像是:
abstract class Expression {
class Equation extends Expression {
public String operator; //Operator
public Expression left; //Left hand side
public Expression right;//Right hand side
public Equation(String o, Expression l, Expression r) {operator = o, left = l, /n
right = r}; //Constructor for the Equation
}
然后,您可以添加到它为不同类型的方程式创建场景。请记住,左侧、右侧和运算符是任意的。您也可以在左右两侧创建带有运算符的方程式,以允许进行多项操作。绝对不同于您的设置方式,但希望这会有所帮助。
推荐阅读
- java - Spring boot JPA相关实体说明
- r - 在R中的for循环中为每个索引组合函数的输出
- github-actions - Github Action 是否支持按需自托管运行器?
- python - 如何强制第二级多索引的值?
- c# - Unity - 暂停/恢复按钮会触发我的跳跃动画 - 如何解决?
- jdbc - JBoss 池的 IdleCount 值为负
- python - 重新拟合已保存的 scikit-learn 模型,但未使用某些功能 - “ValueError: A given column is not a column of the dataframe”
- javascript - 如何在 React 中动态传递组件?
- reactjs - SyncState 与将整个状态发送给其他客户端有何不同?
- javascript - 将带有两个文件和文本的 FormData 发送到控制器