运算符: Plus , Minus , Multiply , Divide . 每个都有两个 Expression 字段: left 和 right .
然后将您的文本表达式解析为表达式树:
// 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);
2 回答
首先,您可以在String而不是if-then-else链上使用开关 . 另一种方法是从String到Function构建静态最终Map(例如HashMap) . 字符串是运算符 . 功能执行操作 . 在Java 8中,您可以将函数指定为lambda . 我现在只能通过手机访问,因此无法显示代码 . 如果您添加显示您的意思的代码,您的问题会更好 .
由于您有兴趣超越培训材料的范围,并且假设您已经了解了接口,我相信您正在寻找的是binary expression tree(该维基百科文章实际上解释了它很好) .
基本上,您使用
double compute()
方法创建一个接口Expression
. 将有两种类型的实现类:操作数:
Constant
和Variable
.运算符:
Plus
,Minus
,Multiply
,Divide
. 每个都有两个Expression
字段:left
和right
.然后将您的文本表达式解析为表达式树:
如果您选择接受它,您的新作业将编写表达式类和解析器以从文本表达式构建表达式树 .
希望这会鼓励你超越训练材料,在比赛中享受一些乐趣 .