String operacao = "+";
int valor1 = 10;
int valor2 = 2;
int resultado = valor1 + operacao + valor2;
Ou seja, passar a operação a ser executada no momento da execução, dependendo do valor da String recebida?
Grato, Carlos.
String operacao = "+";
int valor1 = 10;
int valor2 = 2;
int resultado = valor1 + operacao + valor2;
Ou seja, passar a operação a ser executada no momento da execução, dependendo do valor da String recebida?
Grato, Carlos.
Em java não há “eval”, isso que você quer fazer em linguagens dinâmicas como JavaScript, Ruby e Python seria muito fácil.
Bem, mas focando em Java, você terá que tratar essa operação com “ifs”, não tem muito jeito
C
cmendes
Ok, muito obrigado…
Alexandre_Saudate
Isso não quer dizer que você não pode ter um certo grau de dinamismo em Java. Obviamente, não é tão fácil quanto em linguagens dinamicamente tipadas, mas dê uma olhada em frameworks como Javassist, por exemplo. Talvez você consiga fazer algo do tipo.
[]´s
M
marconems
Tem jeito sim, e sem utilizar IFs!
Faça assim:
public interface Operacao{
public int efetua(int fatorA, int fatorB);
}
public class Soma implements Operacao{
public int efetua(int fatorA, int fatorB){
return fatorA + fatorB;
}
}
import java.util.Map;
import java.util.HashMap;
public class Executavel{
static Map<String, Operacao> mapa = new HashMap<String, Operacao>();
static{
mapa.put("+", new Soma());
}
public static void main(String[] args){
Operacao op = mapa.get("+"); //Passe a String com a operação
System.out.println(op.efetua(10, 2));
}
}
Se quiser implementar outras operações (subtração, etc) basta seguir o modelo da Soma: criar uma classe que implemente a interface Operacao e implemente o método efetua da forma que quiser.
Para coisas simples como operações, dá p/ vc usar um ScriptEngine. Olhe um exemplo com a engine para javascript (na verdade, vai ser instanciada uma engine para ECMAScript).
importjavax.script.*;...ScriptEngineManagersem=newScriptEngineManager();ScriptEnginese=sem.getEngineByName("javascript");// com isso vc vê realmente o nome da linguagem que é suportada pela engine// no caso vai ser ECMAScriptSystem.out.println(se.getFactory().getLanguageName());Stringn1="12";Stringn2="23";Stringop="+";try{Stringr=String.valueOf(se.eval(n1+op+n2));doubled=Double.parseDouble(r);System.out.println(d);}catch(ScriptExceptionexc){exc.printStackTrace();}