Dato un polinomio con una singola variabile x, e il valore di x come input, calcola il suo valore. Esempi:Valuta la stringa polinomiale senza utilizzare regex e API
eval("-2x^3+10x-4x^2","3")=-60
eval("x^3+x^2+x","6")=258
Descrizione di emissione: In questo codice che rompono la stringa in una stringa ogni volta che un +/- si incontra e passare la stringa ad una funzione che restituisce singolo termine come "-2x^3". Quindi il mio codice per input = "-2x^3 + 10x-4x^2" calcola solo fino a "-2x^3 + 10x" e salta la parte "-4x^2".
Qualcuno può dirmi cosa c'è di sbagliato qui?
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;
}
}
Mi permetta di riformulare - Quando si tenta di eseguire il codice di esempio come è, ottengo 'Exception in thread java.lang.NumberFormatException "principale": Per stringa di input: "+10"'. Ciò significa che il tuo esempio di codice non riproduce il problema, il che rende la vita più difficile per noi. – Dukeling
Dukeling ha ragione, perché hai incluso il segno +/- nella stringa dopo averlo trovato. Per evitare ciò, è necessario modificare 'str = str.substring (i);' per essere 'str = str.substring (i + 1);' in questo modo il resto della stringa inizia dopo +/- piuttosto che includere esso. –
Ma non ha bisogno di includerlo se è "-"? Altrimenti il fatto che sia '-' piuttosto che '+' si perde completamente. – ajb