无法从负数中正确减去数字

时间:2015-04-28 12:19:05

标签: java recursion

我正在使用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);
}

2 个答案:

答案 0 :(得分:1)

让我们开始调试。表达:-2-2

  1. expression.contains("-");是真的。
  2. index = expression.indexOf("-");返回给你0,但你是 假设它必须是2(2是第二个减去的指数 表达)。
  3. 在此状态下,我们有index = 0str = ""

    为了避免它,如果表达式以' - '开头,那么你可以在表达式的开头添加0。

答案 1 :(得分:-1)

首先,操作数的顺序必须在“ - ”块中反转。其次,操作符必须向后处理,即5-5-5 =(5-5)-5而不是5-(5-5)。因此,请使用lastIndexOf而不是indexOf。这应该有效:

{{1}}