用Java语言循环方法实现解释器模式两位数的加减法运算
时间: 2024-04-30 17:17:52 浏览: 150
使用Java实现语言解释器
好的,我理解了你的问题。下面是一个示例代码,用Java语言实现解释器模式来解析两位数的加减法运算:
```java
import java.util.Stack;
public class InterpreterPatternExample {
public static void main(String[] args) {
String expression = "5 3 2 - +"; // 5+(3-2)
ExpressionParser parser = new ExpressionParser();
int result = parser.parse(expression);
System.out.println("Result: " + result); // Output: Result: 6
}
}
interface Expression {
int interpret();
}
class Number implements Expression {
private int number;
public Number(int number) {
this.number = number;
}
@Override
public int interpret() {
return number;
}
}
class Plus implements Expression {
private Expression leftOperand;
private Expression rightOperand;
public Plus(Expression leftOperand, Expression rightOperand) {
this.leftOperand = leftOperand;
this.rightOperand = rightOperand;
}
@Override
public int interpret() {
return leftOperand.interpret() + rightOperand.interpret();
}
}
class Minus implements Expression {
private Expression leftOperand;
private Expression rightOperand;
public Minus(Expression leftOperand, Expression rightOperand) {
this.leftOperand = leftOperand;
this.rightOperand = rightOperand;
}
@Override
public int interpret() {
return leftOperand.interpret() - rightOperand.interpret();
}
}
class ExpressionParser {
public int parse(String expression) {
Stack<Expression> stack = new Stack<>();
String[] tokens = expression.split(" ");
for (String token : tokens) {
if (isOperator(token)) {
Expression rightOperand = stack.pop();
Expression leftOperand = stack.pop();
if (token.equals("+")) {
stack.push(new Plus(leftOperand, rightOperand));
} else if (token.equals("-")) {
stack.push(new Minus(leftOperand, rightOperand));
}
} else {
int number = Integer.parseInt(token);
stack.push(new Number(number));
}
}
return stack.pop().interpret();
}
private boolean isOperator(String token) {
return token.equals("+") || token.equals("-");
}
}
```
在这个示例代码中,我们定义了三个类:`Number`、`Plus` 和 `Minus`。`Number` 表示一个数字,`Plus` 和 `Minus` 分别表示加法和减法。所有这些类都实现了 `Expression` 接口,其中 `interpret()` 方法返回解释后的结果。
`ExpressionParser` 类是解释器模式的主要实现。该类将字符串表达式拆分成一系列 `Number` 和 `Plus` 或 `Minus` 对象,并将它们压入一个栈中。在遍历完整个字符串后,栈中只剩下一个 `Expression` 对象,该对象表示整个解释后的表达式。最后,我们调用 `interpret()` 方法来获取解释后的结果。
请注意,此代码仅解释了两个数字的加减法运算,您可以根据需要进行适当的修改以支持其他运算。
阅读全文