"tranformação"?

6 respostas
W

pessoal eu tenho uma dúvida…

vou chutar um valor só pra exemplo

se eu tenho um String com o valor " 2 *3 +4 / 2"

tem alguma maneira de eu tipo…
não sei a palavra certa…
mas eu diria tranformar isso
numa operação???
que de o resultado 8???

eu tentei o Integer.parseInt

só que eu acho que dá problema
por causa dos operadores +, -, *, /…

alguém pode me ajudar???

já agradeço!!!

6 Respostas

fantomas

Oi Wendly,

 pelo fato de vc ter tentado fazer isso utilizando Integer.parseInt  vou lhe dizer q não vai ser tão simples assim pra vc.

 Na minha opinião você terá que montar um algoritimo que receba essa string e faça uma especie de interpretação de seu conteúdo; de forma bem resumida o algoritimo vai ter que identificar o que é número e o que é operador e construir, vamos dizer assim, o cálculo pretendido e processar para obter o resultado.
 Tente fazer parecido com o que o seu cérebro faz (no meu caso primeiro aparece um palavrão) quando tenta resolver a expressão.

 É um ótimo exercício mas não considero trivial.

System.out.println(“Abraços”);

andreiribas

Você vai ter que contruir um programa de árvore de expressões.

tipo… cada nó folha será um operando e cada nó não-folha será o operador.

Ex:

2 + 3 :

+

/
2 3

Daí você percorre a árvore de acordo com a precedência de operadores, ou pode colocar parênteses pra organizar.

Dá uma procurada na net que tem vários exemplos disso.

antoniopopete

Você pode fazer um laço para ler caractere por caractere da string e ir testando enquanto for numero você vai “fazendo buffeR”, quando for diferente de um numero, então provavelmente é um simbolo…
Então você usa o integer.parseint para gerar o numero e testa com equals o valor do simbolo (+,-,*,/)…

davidbuzatto

Vc está usando Java 6?

Se sim, você pode usar a API de scripting para te ajudar.

Olha um exemplo:

import javax.script.*;

.
.
.

try {
     
    ScriptEngineManager factory = new ScriptEngineManager();            
    ScriptEngine engine = factory.getEngineByName( "JavaScript" );            
    Object o = engine.eval( "( 2 * 3 ) + ( 4 / 2 )" );            
    System.out.println( o );
    
} catch ( ScriptException exc ) {
    exc.printStackTrace();
}

No caso usa a engine para o JavaScript. Creio que para seu caso vá funcionar.

Você poderia utilizar o algorítimo para converter expressões infixadas (2 + 3) para prefixadas (+ 2 3) e depois fazer o cálculo (fica mais fácil de interpretar), mas isso vai te dar muito mais trabalho...

Até mais!

leobr84

Wendly:
pessoal eu tenho uma dúvida…

vou chutar um valor só pra exemplo

se eu tenho um String com o valor " 2 *3 +4 / 2"

tem alguma maneira de eu tipo…
não sei a palavra certa…
mas eu diria tranformar isso
numa operação???
que de o resultado 8???

Rapaz voce pode fazer uma estrutura que percorra a String comparando os caracteres e fazendo as devidas substituições. Por exemplo, o char 2 será substituído pelo valor 2 inteiro, e assim vai. Na estrutura vc pode utilizar o for, e o método da classe String charAt().
Detalhes sobre a classe String e método charAt
http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html
http://java.sun.com/j2se/1.5.0/docs/api/java/lang/CharSequence.html#charAt(int)

W

nossa…nem imagina que tinha tanta maneira pra faze esse negócio…

mas vlw aê pela ajuda galera!!!

vou ver o que consigo fazer aqui!!!

qualquer coisa eu volto aê e pergunto!!!

flw!!!

Criado 11 de junho de 2008
Ultima resposta 12 de jun. de 2008
Respostas 6
Participantes 6