Pessoal, tenho um problema simples que quero resolver mas que tem me dado um certo trabalho para tentar resolver. Quero poder fazer esses tipos de conta no java: 2-(-2) | 2+(-2) | 2*(-2) | 2/(-2).
Se alguém souber como resolver fico grato.
Você pode fazer isso de várias formas, depende a exigência do professor. Acredito que o jeito mais simples é usar o avaliador de expressões do JavaScript.
Exemplo:
public static void main(String[] args) {
try {
String[] expressoesParaTeste = "2-(-2) | 2+(-2) | 2*(-2) | 2/(-2)".split("\\|");
for (String expressao : expressoesParaTeste) {
System.out.println(expressao + " -> " + evaluate(expressao, Integer.class));
}
} catch (ScriptException | ClassCastException e) {
e.printStackTrace();
}
}
public static <T extends Object> T evaluate(String expression, Class<T> returnType) throws ScriptException {
ScriptEngineManager mgr = new ScriptEngineManager();
ScriptEngine engine = mgr.getEngineByName("JavaScript");
T result = (T) engine.eval(expression);
return result;
}
Resultado;
2-(-2) -> 4
2+(-2) -> 0
2*(-2) -> -4
2/(-2) -> -1
Nessa outra postagem você pode ver a implementação manual de um parser. Note que é mais complicado, tendo que ler caractere a caractere, identificando se é uma operação (ex. “-”, “+”) e controlando os parênteses.
Obrigado deu certo!