вы можете попробовать следующий код. Это объектно-ориентированные, весьма общий характер, и вы можете легко расширить его, чтобы добавить новые операторы, в том числе операторов с различным числом аргументов:
public abstract class Operator {
public abstract Integer compute(Integer...values);
}
public class Plus extends Operator {
public Integer compute(Integer...values) {
return values[0] + values[1];
}
}
public class Minus extends Operator {
public Integer compute(Integer...values) {
return values[0] - values[1];
}
}
public class Multiply extends Operator {
public Integer compute(Integer...values) {
return values[0] * values[1];
}
}
public class Divide extends Operator {
public Integer compute(Integer...values) {
return values[0]/values[1];
}
}
Map operatorMap = createOperatorMap();
public Map createOperatorMap() {
Map<String, Operator> map = new HashMap<String, Operator>();
map.put("+", new Plus());
map.put("-", new Minus());
map.put("*", new Multiply());
map.put("/", new Divide());
return map;
}
public int compute(int a, int b, String opString) {
Operator op = operatorMap.get(opString);
if (op == null)
throw new IllegalArgumentException("Unknown operator");
return op.compute(a, b);
}
lol не знал, что я могу импортировать механизм javascript: D для второго варианта: я знаю, что я мог бы использовать переключатель (или, если ..), мне нужен более «элегантный» метод – dynamic
, вы можете реализовать шаблон интерпретатора, но может быть, слишком много для того, что вы хотите. Где-то есть видеоролик GoogleIO о реорганизации такой проблемы, как ваша. не могу вспомнить имя :( – Mauricio
как вы можете вернуть это: return =; return ||; return +;? – delive