用变量Java代替数学运算符

时间:2015-10-10 14:48:27

标签: java variables math operators calculator

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

当使用一堆if / else语句来计算输入哪个运算符并且通常像num1 + num2那样进行数学运算时,程序运行正常。

这超出了我们设定的作业任务,但我现在要做的就是用变量替换运算符,例如:" num1 + num2"将成为" num1 变量 num2"变量等于" +"等

有没有办法在Java中执行此操作?

提前致谢

2 个答案:

答案 0 :(得分:1)

由于您有兴趣超越培训材料的范围,并且假设您已经了解了接口,我相信您所寻找的是binary expression tree(该维基百科文章实际上解释了它很好)

基本上,您使用Expression方法创建了一个界面double compute()。将有两种类型的实现类:

  • 操作数: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);

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

希望这会鼓励你在训练材料之外方式,在玩耍时享受一些乐趣。

答案 1 :(得分:0)

首先,您可以在String上使用开关而不是if-then-else链。另一种方法是从String到Function构建静态最终Map(例如HashMap)。字符串是运算符。功能执行操作。在Java 8中,您可以将函数指定为lambda。我现在只能通过手机访问,因此无法显示代码。如果您添加显示您的意思的代码,您的问题会更好。