在带有子字符串的 Java 中使用递归在字符串中添加数字

Add numbers in a string with recursion in Java with substring

我正在尝试从字符串中添加一些数字 例如字符串是“5 + 3 +2”。这应该 return 10 这是我获取操作员号码的代码是“+”

        int opIndex= expression.indexOf("+");
        Double lhs = Double.parseDouble(expression.substring(0, opIndex));
        Double rhs = Double.parseDouble(expression.substring(opIndex+1));

我在return中得到的是 lhs = 5(这是我想要的) rhs = returned 一个字符串错误 (3+2);

如何才能得到数字 3 然后在 (5+3) 或任何其他方法之后执行 + 2?

谢谢。

您可以使用拆分方法拆分 spring

String array[]=expression.split("+")

现在迭代数组,你可以

“RHS”字符串最终变成类似于 " 3 + 2" 的形式。你的工作是 而不是 得到 3。你的工作是递归:将该字符串提供给你自己的算法,相信它会起作用。

这就是递归的工作原理:你假设你的算法已经有效,然后你编写它,调用你自己,附加规则你只能用 'simpler' 的情况调用你自己(因为否则它会永无止境), 你编写代码来显式处理最简单的情况(在这种情况下,如果我只给你的方法一个数字,大概就是这样。如果我给它 "5",它需要 return 5,而不是递归)。

如果您使用事物列表递归地做事,请始终按照以下模式思考:

  • 处理列表的第一个元素
  • 使用递归调用处理列表的其余部分

所以在 "5 + 3 +2" 的情况下,将 5"+" 分开,然后将其余的 ("3+2") 再次传递给相同的方法。

在开始之前删除空格也更容易。

public static void main(String[] args) {
    String input = "5 + 3 + 2";
    //remove spaces:
    input = input.replaceAll(" +", "");
    int r = evaluate(input);
    System.out.println(r);
}

private static int evaluate(String s) {
    int operatorIndex = s.indexOf('+');
    if(operatorIndex == -1) {
        //no operator found, s is the last number
        //this is the base case that "ends" the recursion
        return Integer.parseInt(s);
    }
    else {
        //this is left hand side:
        int operand = Integer.parseInt(s.substring(0, operatorIndex));
        //this performs the actual addition of lhs and whatever rhs might be (here's where recursion comes in)
        return operand + evaluate(s.substring(operatorIndex+1));
    }
}

此代码打印 10。如果你还想支持减法,它会变得更复杂,但你会弄明白的。