我正在使用Java构建一个简单的计算器。目前,我正在使用测试来测试减法功能。它适用于第一个减法(5-5-5)但由于Java堆栈顺序不适用于(-2-2) - 我该如何解决这个问题。
计算器类:
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);
}
答案 0 :(得分:1)
让我们开始调试。表达:-2-2
expression.contains("-");
是真的。index = expression.indexOf("-");
返回给你0
,但你是
假设它必须是2(2是第二个减去的指数
表达)。在此状态下,我们有index = 0
和str = ""
。
为了避免它,如果表达式以' - '开头,那么你可以在表达式的开头添加0。
答案 1 :(得分:-1)
首先,操作数的顺序必须在“ - ”块中反转。其次,操作符必须向后处理,即5-5-5 =(5-5)-5而不是5-(5-5)。因此,请使用lastIndexOf而不是indexOf。这应该有效:
{{1}}