首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >不能正确地从负数中减去一个数字

不能正确地从负数中减去一个数字
EN

Stack Overflow用户
提问于 2015-04-28 12:19:05
回答 2查看 202关注 0票数 0

我正在用Java构建一个简单的计算器。目前,我正在使用测试测试减法功能。对于第一个减法(5-5-5),它工作得很好,但是由于Java堆栈顺序,(-2-2)不能工作--我如何解决这个问题。

计算器类:

代码语言:javascript
运行
复制
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);
}

测试类:

代码语言:javascript
运行
复制
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);
}
EN

回答 2

Stack Overflow用户

发布于 2015-04-28 12:44:39

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

  1. expression.contains("-");是真的。
  2. index = expression.indexOf("-");返回给您0,但是您假设它必须是2(2是表达式中第二减号的索引)。

在这种状态下,我们有index = 0str = ""

为了避免这种情况,如果表达式以'-‘开头,则可以将0添加到表达式的开头。

票数 1
EN

Stack Overflow用户

发布于 2015-04-28 12:56:54

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

代码语言:javascript
运行
复制
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);
    }
}
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29919309

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档