Java 使用JEP库实现一个计算器,允许公式的互相嵌套,要求对用户输入的计算式进行校验,校验公式的参数数量、格式等,用户使用校验功能可以返回该计算式中的公式是否缺乏参数、是否缺乏括号等
时间: 2024-10-16 07:17:53 浏览: 28
在Java中,我们可以利用JEP(Java Expression Parser)库来实现一个支持嵌套公式和输入校验的计算器。JEP是一个强大的表达式解析器,可以帮助我们处理复杂的数学运算。
首先,你需要在项目中引入JEP库,可以通过Maven或Gradle将其添加到依赖中。然后,你可以创建一个Calculator类,其中包含以下关键部分:
1. **解析函数**:使用JEP的`Parser`类,将用户的输入字符串转换为表达式树。
```java
import net.sourceforge.purejavacomm.util.PureJavaCommunicator;
...
public Evaluator parseExpression(String expression) {
try {
return new Evaluator(expression);
} catch (ParseException e) {
throw new IllegalArgumentException("Invalid input: " + e.getMessage());
}
}
```
2. **校验函数**:检查表达式树的结构,如参数数量、括号匹配等。
```java
public boolean validateExpression(Evaluator evaluator) {
if (!evaluator.checkValid()) {
return false;
}
// 检查括号数
int openBrackets = 0;
for (int i = 0; i < evaluator.getProgram().length(); i++) {
char c = evaluator.getProgram().charAt(i);
if (c == '(') {
openBrackets++;
} else if (c == ')') {
openBrackets--;
if (openBrackets < 0) {
return false;
}
}
}
return openBrackets == 0;
}
```
3. **计算函数**:如果校验通过,执行计算并提供结果。
```java
public double calculate(Evaluator evaluator) {
try {
return evaluator.getValue();
} catch (ArithmeticException e) {
throw new IllegalArgumentException("Invalid calculation: " + e.getMessage());
}
}
```
4. **主方法**:接受用户输入,调用上述方法进行校验和计算。
```java
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("Enter a mathematical expression:");
String input = scanner.nextLine();
Evaluator parser = parseExpression(input);
if (validateExpression(parser)) {
double result = calculate(parser);
System.out.println("Result: " + result);
} else {
System.out.println("Invalid expression. Please check your inputs.");
}
}
```
阅读全文