Учитывая многочлен с одной переменной x и значением x в качестве входных данных, вычислите его значение. Примеры:
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;
}
}
Exception in thread "main" java.lang.NumberFormatException: For input string: "+10"
. Это означает, что ваш пример кода не воспроизводит проблему, что усложняет нам жизнь. - person Bernhard Barker   schedule 22.08.2013str = str.substring(i);
наstr = str.substring(i+1);
таким образом, чтобы остальная часть строки начиналась после +/-, а не включала его. - person Paris Nelson   schedule 22.08.2013