我正在用java构建一个简单的计算器。目前,我正在使用测试测试减法功能。它对于第一个减法(5-5-5)很好,但是对于(-2-2)不起作用,因为java堆栈顺序-我如何着手解决这个问题。
计算器类:
public class Calculator{
public double evaluate(String expression){
if (expression.contains("+")){
int index = expression.indexOf("+");
String str1 = expression.substring(0, index);
// String str2 = expression.substring(index + 1);
return evaluate(str1) + evaluate(expression.substring(index + 1));
}
else if (expression.contains("-")){
int index = expression.indexOf("-");
String str1 = expression.substring(0, index);
// String str2 = expression.substring(index + 1);
return evaluate(expression.substring(index + 1)) - evaluate(str1);
}
return Double.parseDouble(expression);
}
测试等级:
public class CalculatorTest{
Calculator cal;
@Before
public void setUp(){
cal = new Calculator();
}
@Test
public void testEvaluateReturnsDoubleMinusZeroWhenStringFiveMinusFiveMinusFiveIsPassedIn(){
assertEquals(-5.0,cal.evaluate("5-5-5"),0.0);
}
@Test
public void testEvaluateReturnsDoubleMinusFourWhenStringMinusTwoMinusTwoIsPassedIn(){
assertEquals(-4.0,cal.evaluate("-2-2"),0.0);
}
2条答案
按热度按时间axr492tv1#
我们开始调试吧。表达式:
-2-2
expression.contains("-");
这是真的。index = expression.indexOf("-");
回到你身边0
,但您假设它必须是2(2是表达式中第二个负号的索引)。在这种情况下
index = 0
以及str = ""
.为了避免这种情况,如果表达式以“-”开头,则可以将0添加到表达式的开头。
cigdeys32#
首先,在“-”块中,操作数的顺序必须相反。第二,必须向后处理运算符,即5-5-5=(5-5)-5,而不是5-(5-5)。因此,请使用lastindexof而不是indexof。这应该起作用: