Equação matemática em uma String[Resolvido]

Pessoal, existe algum jeito de transformar uma String que contém uma equação em algum tipo que o java entenda como equação? Por exemplo:

String equacao = "3+5";

Quero transformar a variavel acima nisso

int resultado = 3+5;

Tem como?

bom…rs ja q ninguem respondeu…

eu acredito que não… e que para fazer isso vc teria que mandar o seu programa ler cada token, semelhante ao q um compilador faz, converter os numeros para float (ou algum outro tipo numérico), verificar se o simbolo que não for numérico é um sinal de + - * ou / para fazer contas, além de procurar pelos “(” e “)” para considerar algum tipo de prioridade (sem pensar muito em como ficaria esse código eu imagino algum tipo de recursividade, ao chamar o proprio metodo quando encontra algum cara desses, envinado o conteudo entre “(” e “)”, para ele calcular e retornar o q tem fora…

bom…se alguém conhecer alguma coisa ja pronta que faça isso posta ai…

[quote=maior_abandonado]bom…rs ja q ninguem respondeu…

eu acredito que não… e que para fazer isso vc teria que mandar o seu programa ler cada token, semelhante ao q um compilador faz, converter os numeros para float (ou algum outro tipo numérico), verificar se o simbolo que não for numérico é um sinal de + - * ou / para fazer contas, além de procurar pelos “(” e “)” para considerar algum tipo de prioridade (sem pensar muito em como ficaria esse código eu imagino algum tipo de recursividade, ao chamar o proprio metodo quando encontra algum cara desses, envinado o conteudo entre “(” e “)”, para ele calcular e retornar o q tem fora…

bom…se alguém conhecer alguma coisa ja pronta que faça isso posta ai… [/quote]

É… então lasquei-me, porque o conteúdo vem obrigatoriamente de uma String.

Usa o split da classe String para pegar os dois números entre o a sinal…e depois faça o parse para o tipo desejado.

Eu estou fazendo um exemplo aqui, dá um tempinho que post…hehe! Abs!

Como pode ser a expressão de entrada???

São contas simples como vc colocou 1+1, ou pode ser 1+1-1 e etc etc etc???

[quote=filipefox]Como pode ser a expressão de entrada???

São contas simples como vc colocou 1+1, ou pode ser 1+1-1 e etc etc etc???[/quote]

pode 1+35/3-8+7 se o usuário quiser. Isso porque estou implementando só a parte em que o usuário digita certo, porém se ele quiser digitar i20exksidd_)22 ele pode. Mas essa parte é mais simples penso eu.

Outro detalhe é que a equação suporta parenteses. Porém se for problema isso, estou pensando em pegar o que estiver entre os parenteses, resolver e jogar o resultado no lugar dos parenteses.

1 curtida

Só número inteiro ou vai aceitar doubles, floats???

1 curtida

Aceita doubles ou floats também.

1 curtida

a solução é essa

http://www.beanshell.org

import bsh.Interpreter;

Interpreter i = new Interpreter();  // Construct an interpreter
i.set("foo", 5);                    // Set variables
i.set("date", new Date() ); 

Date date = (Date)i.get("date");    // retrieve a variable

// Eval a statement and get the result
i.eval("bar = foo*10");             
System.out.println( i.get("bar") );

// Source an external script file
i.source("somefile.bsh");
1 curtida

Ou GroovyShell.

Você faz algo como

Binding binding   = new Binding();
GroovyShell shell = new GroovyShell(binding);

String formula = "1 +2 - 3 * (5 / 3)"; //pode colocar qualquer expressão matematica na formula
System.out.println(shell.evaluate(formula));

O resultado normalmente é um BigDecimal…mas nem sempre.

1 curtida

Ou implementar um analisador léxico,sintático e semântico para operações matemáticas :wink:

Eu fiz um há um tempo atrás…

Resolvi o problema com a solução proposta pelo rodrigo_gomes por parecer a mais simples. Funciona perfeitamente. Muito obrigado a todos que ajudaram.

rodrigo_gomes,quais são as bibliotecas que eu tenho que importar para o código rodar?

Boa noite, percebo que neste tópico só tem fera, estou com problema que acho que está relacionado com o assunto. Estou tentando acessar o sistema da justiça do trabalho de minha residência através de certificado digital, mas está aparecendo a seguinte mensagem:

Abaixo segue o link da página que abre na minha máquina.

http://pje.trt16.jus.br/primeirograu/login.seam?loginComCertificado=true&cid=169418

que puder ajudar, obrigado.