これまでのところ、文字列を加算、減算、および乗算するevaluate
メソッドがあります (例: "5*5")。ただし、1 桁を 3 桁 ("5*10") で評価しようとすると、"50" ではなく "5" が返されます。私の問題は、2桁の最初の文字列のみを取得し、それに応じて評価していることだと思います。何か案は?
これが私のコードです:
public double evaluate(String exp){
String left = "";
String right = "";
double leftValue = 0;
double rightValue = 0;
double answer = 0;
//ensures expression matches an appropriate expression (i.e. 2+2, not "2"
if(exp.length()==1)
{
//if single digit, return double value
return Double.parseDouble(exp);
}
//searching for a "+"
for(int i=0;i<exp.length();i++)
{
if(exp.charAt(i)=='+')
{
right = exp.substring(i+1, exp.length());
leftValue = subtract(left);
rightValue = evaluate(right);
answer = leftValue + rightValue;
return answer;
}
else
{
left = left + exp.substring(i,(i+1));
}
} // End for loop
answer = subtract(exp);
return answer;
} // End evaluate method
// Guaranteed there are no addition operators in exp
public double subtract(String exp){
String leftString = "";
String rightString = "";
double leftValue = 0;
double rightValue = 0;
double answer = 0;
for(int i=exp.length()-1;i>=0;i--)
{
if(exp.charAt(i)=='-')
{
// Convert rightString into Double
rightValue = Double.parseDouble(rightString);
leftString = exp.substring(0,i);
leftValue=subtract(leftString);
answer = leftValue - rightValue;
return answer;
}
else
// Accumulating the right string
{
rightString = rightString + exp.substring(i,(i+1));
}
} // End for loop
answer= multiply(exp);
return answer;
...then the code goes onto multiplication, etc....
} // End evaluate method