Problemas com operações negativas

2 respostas
thiagomartendal

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.

2 Respostas

Guilherme_Passer

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.

thiagomartendal

Obrigado deu certo!

Criado 9 de janeiro de 2016
Ultima resposta 11 de jan. de 2016
Respostas 2
Participantes 2