由于某种原因,当我在这里测试“ 100-50-40”时,我得到的是“ 60”而不是“ 10”。所有其他组合均可,例如“ 10 + 20”和“ 40-20”。当我尝试连续减去多个数字时,就会出现问题。有任何想法吗?
public double add(String exp){
String left = "";
String right = "";
double leftValue = 0;
double rightValue = 0;
double answer = 0;
for(int i=0;i<exp.length();i++)
{
if(exp.charAt(i)=='+')
{
right = exp.substring(i+1, exp.length());
leftValue = subtract(left);
rightValue = add(right);
answer = leftValue + rightValue;
return answer;
}
else
{
left = left + exp.substring(i,(i+1));
}
} // End for loop
answer = subtract(exp);
return answer;
} // End add method
//guaranteed there are no addition operators in exp
public double subtract(String exp){
String left = "";
String right = "";
double leftValue = 0;
double rightValue = 0;
double answer = 0;
for(int i=0;i<exp.length();i++)
{
if(exp.charAt(i)=='-')
{
right = exp.substring(i+1, exp.length());
leftValue = Double.parseDouble(left);
rightValue = subtract(right);
answer = leftValue - rightValue;
return answer;
}
else
{
left = left + exp.substring(i,(i+1));
}
} // End for loop
answer = Double.parseDouble(exp);
return answer;
}
最佳答案
您之所以得到90,是因为您在从100中减去结果之前评估为50-40。
在这段代码中,您将表达式除以第一个负号:
right = exp.substring(i+1, exp.length());
leftValue = Double.parseDouble(left);
rightValue = subtract(right);
answer = leftValue - rightValue;
rightValue是“ 50-40”,leftValue是100。
您可以通过找到最后一个减号来解决这种特殊情况。
就是说,如果您最终想要与其他运算符和分组一起处理更复杂的表达式,则可能会发现阅读有关手写recursive-descent parsers或使用parser generators的更多信息很有用。使用解析器生成器,您可以指定所需的语法,然后该工具将构建代码来为您解析它。我自己最喜欢的Java解析器生成器是Antlr。
关于java - 减法返回错误答案,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16725440/