Java写一个基础的计算器,要带括号
时间: 2024-03-16 15:46:15 浏览: 14
好的,以下是一个Java基础计算器的实现,支持加减乘除和括号运算:
```java
import java.util.*;
public class Calculator {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("请输入表达式:");
String expression = sc.nextLine();
double result = calculate(expression);
System.out.println("结果为:" + result);
}
public static double calculate(String expression) {
Stack<Double> numStack = new Stack<>();
Stack<Character> opStack = new Stack<>();
for (int i = 0; i < expression.length(); i++) {
char ch = expression.charAt(i);
if (ch >= '0' && ch <= '9') {
// 如果是数字,继续往后读取数字字符,直到遇到非数字字符
int j = i;
while (j < expression.length() && (expression.charAt(j) >= '0' && expression.charAt(j) <= '9' || expression.charAt(j) == '.')) {
j++;
}
double num = Double.parseDouble(expression.substring(i, j));
numStack.push(num);
i = j - 1;
} else if (ch == '(') {
opStack.push(ch);
} else if (ch == ')') {
while (opStack.peek() != '(') {
double num2 = numStack.pop();
double num1 = numStack.pop();
char op = opStack.pop();
double result = calculate(num1, num2, op);
numStack.push(result);
}
opStack.pop(); // 弹出左括号
} else if (ch == '+' || ch == '-' || ch == '*' || ch == '/') {
while (!opStack.isEmpty() && opStack.peek() != '(' && priority(ch) <= priority(opStack.peek())) {
double num2 = numStack.pop();
double num1 = numStack.pop();
char op = opStack.pop();
double result = calculate(num1, num2, op);
numStack.push(result);
}
opStack.push(ch);
}
}
while (!opStack.isEmpty()) {
double num2 = numStack.pop();
double num1 = numStack.pop();
char op = opStack.pop();
double result = calculate(num1, num2, op);
numStack.push(result);
}
return numStack.pop();
}
public static double calculate(double num1, double num2, char op) {
switch (op) {
case '+':
return num1 + num2;
case '-':
return num1 - num2;
case '*':
return num1 * num2;
case '/':
return num1 / num2;
default:
return 0;
}
}
public static int priority(char op) {
switch (op) {
case '+':
case '-':
return 1;
case '*':
case '/':
return 2;
default:
return 0;
}
}
}
```
运行程序后输入表达式即可得到计算结果。例如输入`(1+2)*3-4/2`,程序会输出`结果为:7.0`。