用java编写代码实现混合四则运算需包括加减乘除以及括号的应用,实现(a+b)*c-d/2
时间: 2024-09-19 18:06:22 浏览: 37
在Java中,你可以使用栈(Stack)数据结构来实现混合四则运算,结合优先级队列(Precedence Queues)或递归来处理括号和运算顺序。下面是一个简单的实现步骤:
首先,我们需要创建一个函数来解析表达式并转换成操作数和运算符的列表。然后遍历这个列表,应用适当的计算规则。
```java
import java.util.Stack;
public class Calculator {
public static int evaluate(String expression) {
Stack<Integer> numbers = new Stack<>();
Stack<Character> ops = new Stack<>();
for (int i = 0; i < expression.length(); i++) {
char c = expression.charAt(i);
// 如果遇到数字,直接压入数字栈
if (Character.isDigit(c)) {
StringBuilder sb = new StringBuilder();
while (i < expression.length() && Character.isDigit(expression.charAt(i + 1))) {
sb.append(expression.charAt(i + 1));
i++;
}
i--;
numbers.push(Integer.parseInt(sb.toString()));
} else if (c == '(') {
ops.push(c);
} else if (c == ')') {
while (!ops.isEmpty() && ops.peek() != '(') {
calculate(ops, numbers);
}
ops.pop();
} else { // 运算符
while (!ops.isEmpty() && hasHigherPriority(ops.peek(), c)) {
calculate(ops, numbers);
}
ops.push(c);
}
}
// 处理剩余的运算
while (!ops.isEmpty()) {
calculate(ops, numbers);
}
return numbers.pop();
}
private static boolean hasHigherPriority(char op1, char op2) {
// 定义运算符的优先级
switch (op1) {
case '+':
case '-':
return true;
default:
return false;
}
switch (op2) {
case '*':
case '/':
return true;
default:
return false;
}
}
private static void calculate(Stack<Character> ops, Stack<Integer> numbers) {
int num2 = numbers.pop();
int num1 = numbers.pop();
char op = ops.pop();
switch (op) {
case '+': numbers.push(num1 + num2); break;
case '-': numbers.push(num1 - num2); break;
case '*': numbers.push(num1 * num2); break;
case '/': numbers.push(num1 / num2); break;
}
}
}
```
使用这个`evaluate`方法,你可以像这样计算表达式:
```java
String expression = "((5+3)*2)-4/2";
int result = Calculator.evaluate(expression);
System.out.println("结果是: " + result);
阅读全文