Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何代数展开数学运算字符串_Java_Arrays_Math_Arraylist - Fatal编程技术网

Java 如何代数展开数学运算字符串

Java 如何代数展开数学运算字符串,java,arrays,math,arraylist,Java,Arrays,Math,Arraylist,假设我有 String equation = "-2(3u-x)-v" 从用户输入 我想知道是否有一个库可以将其转换为: -6u+2x-v 我似乎找不到任何答案,因此我自己解决了这个问题,但似乎做了很多工作,而且效率很低(我只考虑了u、x和v) 下面我将修改列表,将整数分组,以便于乘法 char[] charArray = equation.toCharArray(); ArrayList<String> eq= new ArrayList<String>();

假设我有

String equation = "-2(3u-x)-v"
从用户输入

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

我似乎找不到任何答案,因此我自己解决了这个问题,但似乎做了很多工作,而且效率很低(我只考虑了u、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]));
        }
    }
char[]charArray=等式.toCharArray();
ArrayList eq=新的ArrayList();
对于(int i=0;i,您可以像这样展开表达式:

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();
        }
    }
}

这有点含糊不清。你的标题暗示你只想删除括号,但实际上你在做代数计算。但你没有说你想在多大程度上进行这种计算。你想去掉任何括号集,甚至是括号的层吗?那么,真的,你要将任何涉及+、-、或*的代数表达式转换为类似于“析取范式”,其中*是你的“连接”,+/-是你的“析取”"?你想做什么?同意,你想做什么对我们回答这样一个问题至关重要。你可能正在寻找一种基于数学公理解析字符串的方法。有。我从未使用过它,但似乎它可能是你正在寻找的。我查过几个库他们似乎不想让我声明一个变量值,或者我就是找不到方法(exp4j和JEP)。我只需要去掉括号就可以得到一个简单的代数形式。谢谢!这让我的生活如此简单。你能告诉我你是如何发现这个库的吗?