无法从负数中正确减去一个数

3npbholx  于 2021-07-13  发布在  Java
关注(0)|答案(2)|浏览(362)

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

axr492tv1#

我们开始调试吧。表达式:
-2-2 expression.contains("-"); 这是真的。 index = expression.indexOf("-"); 回到你身边 0 ,但您假设它必须是2(2是表达式中第二个负号的索引)。
在这种情况下 index = 0 以及 str = "" .
为了避免这种情况,如果表达式以“-”开头,则可以将0添加到表达式的开头。

cigdeys3

cigdeys32#

首先,在“-”块中,操作数的顺序必须相反。第二,必须向后处理运算符,即5-5-5=(5-5)-5,而不是5-(5-5)。因此,请使用lastindexof而不是indexof。这应该起作用:

public class Calculator {

    public double evaluate(final String expression) {

        if (expression.lastIndexOf("+") > 0) {
            final int index = expression.lastIndexOf("+");
            final String str1 = expression.substring(0, index);
            // String str2 = expression.substring(index + 1);
            return evaluate(str1) + evaluate(expression.substring(index + 1));
        }

        else if (expression.lastIndexOf("-") > 0) {
            final int index = expression.lastIndexOf("-");
            final String str1 = expression.substring(0, index);
            // String str2 = expression.substring(index + 1);
            return evaluate(str1) - evaluate(expression.substring(index + 1));
        }
        return Double.parseDouble(expression);
    }
}

相关问题