public String calculate(@RequestBody String expression) { return ResponseEntity.ok("结果是");补全这段代码,用自定义算法,用ifelse进行算数
时间: 2024-09-28 12:03:58 浏览: 0
```java
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class CalculatorController {
@PostMapping("/calculate")
@ResponseStatus(HttpStatus.OK)
public String calculate(@RequestBody String expression) {
try {
// 定义一个栈用于存储运算结果和操作数
Stack<String> stack = new Stack<>();
// 遍历表达式,每遇到一个数字就入栈,遇到运算符则进行计算
for (char c : expression.toCharArray()) {
if (Character.isDigit(c)) {
stack.push(String.valueOf(c));
} else if (c == '+' || c == '-') {
String operand2 = stack.pop();
String operand1 = stack.pop();
// 进行加减运算
double result;
if (c == '+') {
result = Double.parseDouble(operand1) + Double.parseDouble(operand2);
} else {
result = Double.parseDouble(operand1) - Double.parseDouble(operand2);
}
// 将计算结果转换回字符串并入栈
stack.push(String.valueOf(result));
}
}
// 最后栈顶应为最终的结果
String finalResult = stack.pop();
// 返回结果
return "结果是:" + finalResult;
} catch (Exception e) {
return "错误:" + e.getMessage(); // 捕获并返回错误信息
}
}
}
```
这段代码定义了一个REST控制器,接收一个字符串类型的`expression`作为请求体,它使用栈来模拟手动计算过程。遇到数字就压入栈中,遇到运算符则从栈中取出两个操作数,进行加减运算,将结果替换掉其中一个操作数,并继续处理下一个运算符。最后,栈顶的值即为整个表达式的计算结果。