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();
}
假设一个 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();
}