puede probar el siguiente código. Está orientado a objetos, bastante genérico, y se puede ampliar fácilmente para añadir nuevos operadores, incluidos los operadores con un número diferente de argumentos:
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 no sabía que podía importar el motor de JavaScript: D para la segunda opción: sé perfectamente que podría usar un conmutador (o un si ...) quería un método más "elegante" – dynamic
puede implementar un patrón de intérprete pero tal vez es exagerado para lo que quieres. Hay un video de GoogleIO en algún lugar sobre la refacturación de un problema como el suyo. no puede recordar el nombre :( – Mauricio
cómo puede devolver esto: return =; return ||; return +;? – delive