Для вычисления полинома с одной переменной 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;
}
}
Позвольте мне перефразировать - При попытке запустить пример кода, как это, я получаю 'Исключение в нити«основной»java.lang.NumberFormatException: Для ввода строки:«+10»'. Это означает, что ваш образец кода не воспроизводит проблему, что затрудняет жизнь для нас. – Dukeling
Dukeling прав, потому что вы указали знак +/- в строке после того, как нашли его. Чтобы избежать этого, вам нужно изменить 'str = str.substring (i);' to be 'str = str.substring (i + 1);' таким образом остальная часть строки начинается после +/-, а не включает Это. –
Но разве он не должен включать его, если это «-»? В противном случае полностью теряется тот факт, что он «-», а не «+». – ajb