有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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值的arraylist

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


共 (1) 个答案

  1. # 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
    }
    

    然后,您可以在此基础上为不同类型的方程创建场景。请记住,左侧、右侧和操作符是任意的。您还可以创建在左侧和右侧带有运算符的方程式,以允许进行多个运算。与您的设置方式完全不同,但希望这会有所帮助