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?
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.
Só número inteiro ou vai aceitar doubles, floats???
Aceita doubles ou floats também.
a solução é essa
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");
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.
Ou implementar um analisador léxico,sintático e semântico para operações matemáticas
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.