【问题标题】:Java program to solve given polynomial equation with replacing given value of "x" [closed]Java程序通过替换“x”的给定值来求解给定的多项式方程[关闭]
【发布时间】:2020-01-02 21:02:02
【问题描述】:

假设一个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

【问题讨论】:

    标签: java equation polynomial-math inequality


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-07-22
      • 1970-01-01
      • 1970-01-01
      • 2013-05-24
      • 1970-01-01
      • 2018-09-20
      • 1970-01-01
      相关资源
      最近更新 更多