【发布时间】:2019-10-26 16:42:36
【问题描述】:
下面是代码:
public String evaluate() {
if (this.data.equals("+")) {
return String.valueOf(Double.parseDouble(this.children.get(0).evaluate()) + Double.parseDouble(this.children.get(1).evaluate()));
}
else if (this.data.equals("-")) {
return String.valueOf(Double.parseDouble(this.children.get(0).evaluate()) - Double.parseDouble(this.children.get(1).evaluate()));
}
else if (this.data.equals("*")) {
return String.valueOf(Double.parseDouble(this.children.get(0).evaluate()) * Double.parseDouble(this.children.get(1).evaluate()));
}
else {
return String.valueOf(Double.parseDouble(this.children.get(0).evaluate()) / Double.parseDouble(this.children.get(1).evaluate()));
}
}
this.data 值保存的是String形式的操作数。有没有办法完全消除 if-else,减少代码的行数。?也不要使用开关盒。
有没有办法在java中将字符串转换为操作数?
【问题讨论】:
-
您可以使用工厂方法,从
"+"实例化一个类Plus,表示加号运算符等。但它仍然需要有if条件或switch-case来决定要实例化哪个类。 -
@jbx 整个想法是避免 switch 或 if-else。
-
简短回答:否。有关详细信息,请参阅Is it possible to pass arithmetic operators to a method in java?。
-
@NeeharikaKompala 是的,我理解你的整个想法。但是以你的思维方式实现它是非常困难的。 Java 不将字符串视为可评估的表达式(与具有
eval()函数的 Javascript 不同)。
标签: java if-statement switch-statement polymorphism