您是否坚持将操作应用于参数?使用哈希表,而不是无尽的if
if ("+".equals(operator)) {
result = arg1 + arg2;
} else if ...
System.out.println("See, " + arg1 + operator + arg2 " = " + result);
一个稍微扩展的方式:
最简单的方法
import java.util.*;
// Poor man's first-class function
interface BinaryOp {
int apply(int arg1, int arg2);
}
final static BinaryOp ADD = new BinaryOp() {
public int apply(int arg1, int arg2) { return arg1 + arg2; }
}
final static BinaryOp SUBTRACT = new BinaryOp() {
public int apply(int arg1, int arg2) { return arg1 - arg2; }
}
final static BinaryOp MULTIPLY = new BinaryOp() {
public int apply(int arg1, int arg2) { return arg1 * arg2; }
}
static final Map<String, BinaryOp> OPERATIONS = new HashMap<String, BinaryOp>();
// This replaces the 'if', easier to extend.
static {
OPERATIONS.put("+", ADD);
OPERATIONS.put("-", SUBTRACT);
OPERATIONS.put("*", MULTIPLY);
}
public static void main(String[] args) {
...
BinaryOp operation = OPERATIONS.get(operation_name);
int result = operation.apply(arg1, arg2);
...
}
如果你认为这是不必要的长,它是。这样的东西仍然是Java-land中的典型模式。 (这就是为什么Scala存在,但它是另一回事。)
这甚至不触及操作优先级或括号。
应该以正确的方式评估3 + 4 * 5吗? –
@Tim S,暂时还没有,这将是我的下一步,但首先我想解决这个问题,看看我是否可以继续 – MOTIVECODEX
@davecom,它不是重复的,正如ciemborg在这篇文章中所说的:“为此,运行JS引擎“非常”在顶端“。我已经有了那部分,它随机化了一切。我只需要计算它,所以它不是重复的。 – MOTIVECODEX