写一段java代码计算 String a = "((3+2)*1)+2*-4/(8-6)+7"
时间: 2024-05-12 13:18:04 浏览: 14
可以使用栈来实现该计算,以下是示例代码:
```java
import java.util.*;
public class Calculator {
public static void main(String[] args) {
String a = "((3 2)*1) 2*-4/(8-6) 7";
System.out.println(eval(a));
}
public static int eval(String expr) {
Stack<Integer> stack = new Stack<>();
int num = 0;
int sign = 1;
for (int i = 0; i < expr.length(); i++) {
char c = expr.charAt(i);
if (Character.isDigit(c)) {
num = num * 10 + (c - '0');
} else if (c == '(') {
stack.push(sign);
sign = 1;
} else if (c == ')') {
stack.pop();
} else if (c == '+' || c == '-') {
stack.push(sign);
sign = (c == '+') ? 1 : -1;
} else if (c == ' ') {
continue;
} else {
// operator: * or /
int top = stack.isEmpty() ? 1 : stack.peek();
if (top == 1) {
stack.pop();
num *= sign;
stack.push(num);
} else {
stack.pop();
num *= sign * stack.pop();
stack.push(num);
}
num = 0;
}
}
int result = 0;
while (!stack.isEmpty()) {
result += stack.pop();
}
return result;
}
}
```
该代码中,expr 是待计算的表达式,它会被依次遍历每个字符。如果遇到数字,则将其转换成整数;如果遇到左括号,则将当前符号入栈,并将符号重置为 1;如果遇到右括号,则将左括号出栈;如果遇到加号或减号,则将当前符号入栈,并将符号重置为 1 或 -1;如果遇到空格,则跳过;如果遇到乘号或除号,则弹出栈顶符号,将当前符号与栈顶符号乘积后更新当前数字,然后再将其入栈。最后,将栈中剩余的数字相加得到最终结果。
相关推荐
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)