编写一个简单的 Java 应用程序,实现四则混合运算功能,例如实现(a+b)*c+d/2;
时间: 2024-09-20 22:07:27 浏览: 44
编写一个简单的 Java 应用程序,可以利用 Scanner 类来获取用户输入的算术表达式,并通过栈(Stack)数据结构来计算结果。这里是一个基本的示例:
```java
import java.util.Scanner;
import java.util.Stack;
public class Calculator {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入一个包含加、减、乘、除操作的四则混合运算表达式(如:(a+b)*c+d/2),以空格分隔数字和操作符:");
String expression = scanner.nextLine();
Stack<Integer> numStack = new Stack<>();
Stack<Character> opStack = new Stack<>();
for (int i = 0; i < expression.length(); i++) {
char c = expression.charAt(i);
if (Character.isDigit(c)) { // 如果字符是数字,压入数字栈
int num = 0;
while (i < expression.length() && Character.isDigit(expression.charAt(i))) {
num = num * 10 + (expression.charAt(i) - '0');
i++;
}
numStack.push(num);
i--;
} else if (c == '(' || c == ')' || c == '+' || c == '-' || c == '*' || c == '/') { // 如果字符是操作符,处理操作符
while (!opStack.isEmpty() && precedence(opStack.peek()) >= precedence(c)) {
calculate(numStack, opStack);
}
opStack.push(c);
} else if (c == ')') { // 遇到右括号,先处理左括号内的表达式
while (!opStack.peek().equals('(')) {
calculate(numStack, opStack);
}
opStack.pop();
}
}
// 处理最后剩余的操作符
while (!opStack.isEmpty()) {
calculate(numStack, opStack);
}
// 输出结果
System.out.printf("计算结果为:%d\n", numStack.pop());
}
private static int precedence(char op) {
switch (op) {
case '+':
case '-':
return 1;
case '*':
case '/':
return 2;
default:
return -1; // 不需要考虑
}
}
private static void calculate(Stack<Integer> numStack, Stack<Character> opStack) {
int b = numStack.pop();
int a = numStack.pop();
char op = opStack.pop();
switch (op) {
case '+':
numStack.push(a + b);
break;
case '-':
numStack.push(a - b);
break;
case '*':
numStack.push(a * b);
break;
case '/':
if (b != 0)
numStack.push(a / b);
else
throw new IllegalArgumentException("除数不能为零");
break;
}
}
}
```
这个程序会读取用户输入的表达式,然后逐步解析并计算最终的结果。注意,这个示例只支持整数运算,对于浮点数和更复杂的表达式,可能需要使用解析库(如 Apache Commons Math 或者 JavaCC 等)。
阅读全文