के साथ एक एकल चर x बहुपद को देखते हुए, और इनपुट के रूप में एक्स का मान का उपयोग कर, अपने मूल्य की गणना के बिना बहुपद स्ट्रिंग का मूल्यांकन करें। उदाहरण:regex और एपीआई
मुद्दे के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" भाग छोड़ देता है।
क्या कोई मुझे बता सकता है कि यहां क्या गलत है? - या +, और यह मूल्यांकन करने
if(str.charAt(i) == '-' || str.charAt(i) == '+')
{
subStr = str.substring(0, i);
प्रभाव है कि आप लेख संदेश भेजना सिर्फ से पहले substr स्थापित कर रहे है:
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
डुक्लिंग सही है, क्योंकि आप इसे प्राप्त करने के बाद स्ट्रिंग में +/- साइन शामिल कर रहे हैं। इससे बचने के लिए, आपको 'str = str.substring (i); 'str = str.substring (i + 1) होना चाहिए;' जिस तरह से बाकी स्ट्रिंग +/- के बाद शुरू होती है यह। –
लेकिन अगर उसे '-' है तो उसे शामिल करने की आवश्यकता नहीं है? अन्यथा तथ्य यह है कि '+' की बजाय '-' पूरी तरह से खो जाता है। – ajb