再换一个 java写一个带括号计算器
时间: 2024-04-30 17:17:19 浏览: 6
好的,我可以为您设计一个Java编写的带括号计算器。以下是样例代码:
```java
import java.util.*;
public class Calculator {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("Enter your expression: ");
String expression = sc.nextLine();
double result = calculate(expression);
System.out.println("Result: " + result);
}
public static double calculate(String expression) {
Stack<Double> stack = new Stack<>();
double num = 0;
char sign = '+';
for (int i = 0; i < expression.length(); i++) {
char c = expression.charAt(i);
if (Character.isDigit(c)) {
num = num * 10 + (c - '0');
}
if (c == '(') {
int eIndex = findEndIndex(expression.substring(i));
num = calculate(expression.substring(i + 1, i + eIndex));
i += eIndex;
}
if ((!Character.isDigit(c) && c != ' ') || i == expression.length() - 1) {
if (sign == '+') {
stack.push(num);
} else if (sign == '-') {
stack.push(-num);
} else if (sign == '*') {
double n = stack.pop();
stack.push(n * num);
} else if (sign == '/') {
double n = stack.pop();
stack.push(n / num);
}
sign = c;
num = 0;
}
}
double result = 0;
while (!stack.isEmpty()) {
result += stack.pop();
}
return result;
}
public static int findEndIndex(String expression) {
int count = 1;
for (int i = 1; i < expression.length(); i++) {
char c = expression.charAt(i);
if (c == '(') {
count++;
} else if (c == ')') {
count--;
}
if (count == 0) {
return i;
}
}
return expression.length();
}
}
```
该计算器支持加减乘除和括号运算,可以按照数学运算的优先级自动计算表达式。您可以通过输入表达式来测试它。