在带有子字符串的 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
。如果你还想支持减法,它会变得更复杂,但你会弄明白的。
我正在尝试从字符串中添加一些数字 例如字符串是“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
。如果你还想支持减法,它会变得更复杂,但你会弄明白的。