Java 通过替换 "x" 的给定值来求解给定多项式方程的程序

Java program to solve given polynomial equation with replacing given value of "x"

假设一个 java 程序从用户输入的字符串中得到一个多项式方程式,如 "3x^2 - 4x^3 + 3x^3" 然后得到另一个数字 "x" 然后求解具有给定 x 和打印结果的给定方程式。
如果您有任何想法或解决方案,我将不胜感激。非常感谢!

输入:
3x^2 - 4x^3 + 3x^3
x = 4
输出:
-16

输入:
3x - 4x^2 + 2x^4
x = 2
输出:
22

使用JDK1.6,可以使用内置的Javascript引擎。

例如:

ScriptEngineManager m = new ScriptEngineManager();
ScriptEngine engine = m.getEngineByName("JavaScript");
String equation = "3+2";
System.out.println(engine.eval(equation));

会输出 5

不幸的是,这只处理 +、-、*、/,而不处理幂 (^)。因此,我们必须进行一些字符串编辑以使其可用,并添加我们的 x 值。

Assuming our x is 4, we want 3x^2 - 4x^3 + 3x^3 to becomes (3*4*4)-(4*4*4*4)+(3*4*4*4)

这是我编写的用于清理它的快速字符串生成器函数。

public static void main(String[] args) throws ScriptException
{

    String equation = "3x^2 - 4x^3 + 3x^3";
    int x = 4;

    ScriptEngineManager mgr = new ScriptEngineManager();
    ScriptEngine engine = mgr.getEngineByName("JavaScript");

    System.out.println(engine.eval(fixEquation(equation, x)));


}


public static String fixEquation(String equation, int x)
{
    StringBuilder sb = new StringBuilder(equation.replaceAll(" ", ""));
    StringBuilder fixed = new StringBuilder("(");
    StringBuilder temp = new StringBuilder("");


    for(int i = 0; i < sb.length(); i++)
    {

        if(sb.charAt(i)=='^')
        {
            for(int j = i + 1; j < sb.length(); j++)
            {
                if(j + 1 == sb.length())
                {
                    temp.append(sb.charAt(j));
                    for(int k = 0; k < Integer.valueOf(temp.toString()); k++)
                        fixed.append( "*" + x);
                    temp.replace(0, temp.length(), "");
                    i = sb.length();
                    break;
                }
                if(sb.charAt(j) == '+' || sb.charAt(j) == '-' )
                {
                    for(int k = 0; k < Integer.valueOf(temp.toString()); k++)
                        fixed.append( "*" + x);
                    temp.replace(0, temp.length(), "");
                    i = j - 1;
                    break;
                }
                temp.append(sb.charAt(j));

            }
        }
        else if(sb.charAt(i)=='x' && (i + 1 == sb.length() || sb.charAt(i + 1) != '^'))
        {
            fixed.append("*"+ x) ;
        }
        else if(sb.charAt(i)=='x' )
        {
            fixed.append("") ;
        }
        else if(sb.charAt(i) == '+' || sb.charAt(i) == '-')
        {
            fixed.append(")" + sb.charAt(i) + "(");
        }
        else
            fixed.append(sb.charAt(i));
    }

    fixed.append(")");
    return fixed.toString();
}