用变量 Java 替换数学运算符

Replacing Mathematical Operators with Variable Java

目前正在尝试为我的一项 Uni 家庭作业做反向抛光计算器。

当我使用一堆 if/else 语句来计算出输入了哪个运算符并正常执行数学运算时,我的程序运行良好,如 num1+num2。

这超出了我们布置的作业任务,但我现在要做的是用变量替换运算符,例如:“num1 + num2”将变为“num1 变量 num2”,其中变量等于“+”等

Java有没有办法做到这一点?

提前致谢

首先,您可以在 String 上使用 switch 而不是 if-then-else 链。另一种方法是构建一个从 String 到 Function 的静态最终 Map(例如 HashMap)。字符串是运算符。函数执行操作。在 Java 8 中,您可以将函数作为 lambda 表达式提供。我现在只能通过 phone 访问,所以无法显示代码。如果您添加显示您的意思的代码,您的问题将得到更好的接受。

由于您有兴趣超越培训范围 material,并且假设您已经了解了接口,我相信您正在寻找的是 binary expression tree(即维基百科文章其实解释的很好)。

基本上,您使用 double compute() 方法创建接口 Expression。将有两种类型的实现 类:

  • 操作数:ConstantVariable.
  • 接线员:PlusMinusMultiplyDivide。每个都有两个 Expression 字段:leftright.

然后您的文本表达式被解析到表达式树中:

// input: "num1 + num2 * 3"
// result expression tree will be built by parser using:
Expression a = new Variable("num1");
Expression b = new Variable("num2");
Expression c = new Constant(3);
Expression d = new Multiply(b, c);
Expression e = new Plus(a, d);

Map<String, Double> variables = /*defined elsewhere*/;
double result = e.compute(variables);

如果您选择接受,您的新作业将是编写表达式 类 和一个从文本表达式构建表达式树的解析器。

希望这会鼓励您在训练 material 之外 方式 ,在玩耍时获得一些乐趣。