目前正尝试为我的一个Uni家庭作业做一个反向抛光计算器。
当使用一堆if / else语句来计算输入哪个运算符并且通常像num1 + num2那样进行数学运算时,程序运行正常。
这超出了我们设定的作业任务,但我现在要做的就是用变量替换运算符,例如:" num1 + num2
"将成为" num1
变量 num2
"变量等于" +
"等
有没有办法在Java中执行此操作?
提前致谢
答案 0 :(得分:1)
由于您有兴趣超越培训材料的范围,并且假设您已经了解了接口,我相信您所寻找的是binary expression tree(该维基百科文章实际上解释了它很好)
基本上,您使用Expression
方法创建了一个界面double compute()
。将有两种类型的实现类:
Constant
和Variable
。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);
您的新作业,如果您选择接受它,将编写表达式类和解析器以从文本表达式构建表达式树。
希望这会鼓励你在训练材料之外方式,在玩耍时享受一些乐趣。
答案 1 :(得分:0)
首先,您可以在String上使用开关而不是if-then-else链。另一种方法是从String到Function构建静态最终Map(例如HashMap)。字符串是运算符。功能执行操作。在Java 8中,您可以将函数指定为lambda。我现在只能通过手机访问,因此无法显示代码。如果您添加显示您的意思的代码,您的问题会更好。