【问题标题】:Using String to do Math使用字符串做数学
【发布时间】:2020-03-19 21:03:28
【问题描述】:

我正在尝试制作一个允许多种运算的计算器(例如 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("(?&lt;=[-+*/%])|(?=[-+*/%])")

理想情况下,一旦我有了“类型”值,我就可以让我的程序通过这样做来计算方程:

for(int i = 1; i < nums.length; i++) {      
    ans = eq.get(0) type eq.get(func.indexOf(1)+i);
        }

另一个小提示:eq 是一个数组列表,其中包含nums 的所有值。

我想要做的就是让type 变成数学运算,比如 +、- 等。我知道这段代码在我在这里展示的方式中被严重破坏了,但这只是我快速写信给的东西提供一个我想要完成的例子。我查看了与此类似的其他问题,其中解决方案是使用 Math 类并从中调用函数,但它在我的程序中不起作用。有人对实现这一目标的方法有想法吗?谢谢!

【问题讨论】:

标签: java string function math calculator


【解决方案1】:

所以看起来您正在尝试使用语法导向的解释器而不是抽象的解释器。我强烈建议您研究一下,特别是如果您希望您的计算器遵循操作顺序(我假设您这样做)。这是一个很好的例子:

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
}

然后,您可以添加它来为不同类型的方程式创建场景。请记住,左侧、右侧和运算符是任意的。您也可以在左右两侧创建带有运算符的方程式,以允许进行多项操作。绝对不同于您的设置方式,但希望这会有所帮助。

【讨论】:

  • 非常感谢您的建议!当我可以访问我的计算机时,我会试试这个:D
猜你喜欢
  • 1970-01-01
  • 2020-08-25
  • 1970-01-01
  • 2011-08-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-15
  • 2015-10-11
相关资源
最近更新 更多