给定一个具有单个变量x的多项式,并将x的值作为输入,计算其值。实例:不使用正则表达式和API评估多项式字符串
eval("-2x^3+10x-4x^2","3")=-60
eval("x^3+x^2+x","6")=258
问题的描述:在此代码我打破串入一个子每当+/-遇到和子串传递给其评估像“-2x^3”单项的函数。所以我的输入代码=“-2x^3 + 10x-4x^2”只计算到“-2x^3 + 10x”,并跳过“-4x^2”部分。
任何人都可以告诉我什么是错的吗?
public class EvalPolyX2 {
static String testcase1 = "-2x^3+10x-4x^2";
static String testcase2 = "3";
public static void main(String args[]){
EvalPolyX2 testInstance = new EvalPolyX2();
int result = testInstance.eval(testcase1,testcase2);
System.out.println("Result : "+result);
}
public int eval(String str,String valx){
int sum = 0;
String subStr = "";
if(str.charAt(0) == '-')
{
int len = str.length();
for (int i = 0; i < len; i++)
{
if(str.charAt(i) == '-' || str.charAt(i) == '+')
{
subStr = str.substring(0, i);
System.out.println("subStr="+subStr);
sum += evalSubPoly(subStr, valx);
str = str.substring(i);
len = str.length();
i = 0;
}
}
}
else if(str.charAt(0) != '-')
{
str = '+' + str;
int len = str.length();
for (int i = 0; i < len; i++)
{
if(str.charAt(i) == '-' || str.charAt(i) == '+')
{
subStr = str.substring(0, i);
System.out.println("subStr="+subStr);
sum += evalSubPoly(subStr, valx);
str = str.substring(i);
len = str.length();
i=0;
}
}
}
return sum;
}
public int evalSubPoly(String poly,String valx){
int len = poly.length();
String num = "";
String power = "";
int exp = 0, coeff = 0;
for(int i = 0; i < len; i++)
{
if(poly.charAt(i) == 'x')
{
num = poly.substring(0, i);
coeff = Integer.parseInt(num);
}
if(poly.charAt(i) == '^')
{
power = poly.substring(i+1, len);
exp = Integer.parseInt(power);
}
}
if(power.equals(""))
exp = 1;
System.out.println("coeff="+coeff);
int sum = 1;
int x = Integer.parseInt(valx);
for (int i = 0; i < exp; i++)
{
sum = sum*x;
}
System.out.println("sum="+sum);
sum = sum*coeff;
return sum;
}
}
让我改一下 - 当试图运行的代码示例为是,我得到'线程“main” java.lang.NumberFormatException例外:对于输入字符串:“+10”'。这意味着您的代码示例不会重现问题,这会让我们的生活更加困难。 – Dukeling
Dukeling是对的,因为你在找到它之后在字符串中包含+/-符号。为了避免这种情况,你需要将'str = str.substring(i);'改为'str = str.substring(i + 1);'这样,字符串的其余部分在+/-之后开始,而不是包括它。 –
但是,如果它是' - ',他不需要包含它吗?否则,它的' - '而不是'+'会完全丢失。 – ajb