Java表达式计算
时间: 2023-06-28 20:08:18 浏览: 136
表达式计算
Java表达式计算可以使用Java自带的表达式计算库,也可以手动实现表达式计算。
使用Java自带的表达式计算库可以通过以下步骤实现:
1. 引入Java自带的表达式计算库:`import javax.script.ScriptEngineManager;`
2. 创建ScriptEngine对象:`ScriptEngineManager manager = new ScriptEngineManager(); ScriptEngine engine = manager.getEngineByName("JavaScript");`
3. 调用eval方法计算表达式:`Object result = engine.eval(expression);`
其中,expression为需要计算的表达式,result为计算结果。
例如,计算表达式"1+2*3"的值,可以通过以下代码实现:
```
import javax.script.ScriptEngineManager;
import javax.script.ScriptEngine;
import javax.script.ScriptException;
public class ExpressionCalculator {
public static void main(String[] args) throws ScriptException {
String expression = "1+2*3";
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("JavaScript");
Object result = engine.eval(expression);
System.out.println(result);
}
}
```
输出结果为7。
手动实现表达式计算可以使用栈来实现。具体步骤如下:
1. 将表达式转换为后缀表达式(逆波兰表达式)。
2. 遍历后缀表达式,如果是数字,则入栈;如果是运算符,则从栈中弹出两个数进行运算,并将结果入栈。
3. 遍历完后缀表达式,栈中剩下的数就是表达式的计算结果。
例如,计算表达式"1+2*3"的值,可以通过以下代码实现:
```
import java.util.Stack;
public class ExpressionCalculator {
public static void main(String[] args) {
String expression = "1+2*3";
String[] postfix = toPostfix(expression);
int result = calculate(postfix);
System.out.println(result);
}
private static String[] toPostfix(String expression) {
Stack<Character> stack = new Stack<>();
StringBuilder postfix = new StringBuilder();
for (int i = 0; i < expression.length(); i++) {
char ch = expression.charAt(i);
if (Character.isDigit(ch)) {
postfix.append(ch);
} else {
while (!stack.isEmpty() && priority(stack.peek()) >= priority(ch)) {
postfix.append(stack.pop());
}
stack.push(ch);
}
}
while (!stack.isEmpty()) {
postfix.append(stack.pop());
}
return postfix.toString().split("");
}
private static int calculate(String[] postfix) {
Stack<Integer> stack = new Stack<>();
for (String token : postfix) {
if (Character.isDigit(token.charAt(0))) {
stack.push(Integer.parseInt(token));
} else {
int b = stack.pop();
int a = stack.pop();
int result = 0;
switch (token) {
case "+":
result = a + b;
break;
case "-":
result = a - b;
break;
case "*":
result = a * b;
break;
case "/":
result = a / b;
break;
}
stack.push(result);
}
}
return stack.pop();
}
private static int priority(char ch) {
switch (ch) {
case '+':
case '-':
return 1;
case '*':
case '/':
return 2;
default:
return 0;
}
}
}
```
输出结果为7。
阅读全文