如何以代数方式扩展数学运算String

时间:2015-10-19 22:59:38

标签: java arrays math arraylist

让我说我有

String equation = "-2(3u-x)-v"

来自用户输入

我想知道是否有一个库可以将其转换为: -6u + 2X-V

我似乎无法找到任何因此我自己解决了这个问题,但似乎做了很多工作而且我的工作效率很低(我只考虑你,x和v)。

下面我修改列表以将整数分组以便于乘法。

char[] charArray = equation.toCharArray();
ArrayList<String> eq= new ArrayList<String>();


    for (int i = 0; i <= charArray.length-1; i++) {
        if (charArray[i] == 'x' || charArray[i] == 'u' || charArray[i] == 'v') {
            eq.add(String.valueOf(charArray[i]));
        }
        else if (charArray[i] == '-' || charArray[i] == '+') {
            int x = 1;
            if (charArray[i+1] != 'u' && charArray[i+1] != 'v' && charArray[i+1] != 'x')
                x = charArray[i+1]-48;
            if (charArray[i] == '-')
                x = x*-1;
            eq.add(String.valueOf(x));
        }
        else if (charArray[i] == '(' || charArray[i] == ')' || charArray[i] == '=') {
            eq.add(String.valueOf(charArray[i]));
        }
    }

PS我是编程的新手,所以它可能看起来不专业,抱歉

1 个答案:

答案 0 :(得分:2)

使用Symja library,您可以扩展这样的表达式:

package org.matheclipse.core.examples;

import static org.matheclipse.core.expression.F.*;

import org.matheclipse.core.eval.ExprEvaluator;
import org.matheclipse.core.interfaces.IAST;
import org.matheclipse.core.interfaces.IExpr;
import org.matheclipse.parser.client.SyntaxError;
import org.matheclipse.parser.client.math.MathException;

public class SO_ExpandExample {
    public static void main(String[] args) {
        try {
            ExprEvaluator util = new ExprEvaluator(false, 100);

            // expand an expression by using Expand() or ExpandAll() function
            IExpr result = util.evaluate("ExpandAll(-2(3u-x)-v)");
            // print: -6*u-v+2*x
            System.out.println(result.toString());

            // Show an expression in the Java form:
            String javaForm = util.toJavaForm("ExpandAll(-2(3u-x)-v)");
            // prints: ExpandAll(Plus(Times(CN2,Plus(Times(C3,u),Negate(x))),Negate(v)))
            System.out.println(javaForm.toString());

            // use the JavaForm:
            IAST function = ExpandAll(Plus(Times(CN2, Plus(Times(C3, u), Negate(x))), Negate(v)));
            result = util.evaluate(function);
            // print: -6*u-v+2*x
            System.out.println(result.toString());

        } catch (SyntaxError e) {
            // catch Symja parser errors here
            System.out.println(e.getMessage());
        } catch (MathException me) {
            // catch Symja math errors here
            System.out.println(me.getMessage());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}