Calcular expressões vindas de arquivo .txt

7 respostas
S

É o seguinte estou recebendo uma entrada de dados(dados.txt) de um arquivo de texto que contem o seguinte formato:

2 + 3 * 5
( 2 + 3) * 10
( 3 + 4 - 2) * ( 3 + 10 / 2 )
obs: há espaços entres os itens

preciso agora calcular cada expressão que represanta cada linha do arquivo .txt porem não estou conseguindo.

mport java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

public class Calc_Programa {

    public static void main(String[] args) {
        Pilha p = new Pilha(10);

        try {
            BufferedReader in = new BufferedReader(new FileReader("dados.txt"));
            String linha;            
            
            

            int l = 0;
            double d;
            while ((linha = in.readLine()) != null) {
                System.out.print("Linha " + ++l + ": ");
                System.out.println(linha);
                
                
            }
            in.close();
            


        } catch (IOException e) {
            System.out.println("O arquivo\"dados.txt\" não foi encontrado!!!!!");

        }



    }
}

7 Respostas

andre_teprom

Do modo como está feito acredito que esteja fazendo implicitamente um casting para string.
Não seria o caso de voce colocar todo o conteúdo de cada linha como entrada de uma função que retornasse como saída ( return ) a propria entrada ?

É apenas um palpite…

+++

alexvingg

velho vc tem que quebrar sua string
eu fiz um teste aqui dessa maneira funcionou pq eu sei os valores que vem
mais quem sabe não abre sua mente flw

public static void main(String[] args) {
        String teste = "5 + 10 * 8";
        int op1 = teste.indexOf("+");

        String val1 = teste.substring(op1 - 2, op1);
        String val2 = teste.substring(op1 + 1, op1+4);
        System.out.println(val1+"-"+val2);
    }
Grinvon

Não é um exemplo trival, tem que usar técnica de parser, fazer cálculos dos níveis mais internos para os mais externos.

Recomendo a leitura do livro: A Arte do Java. Nele aborda um capítulo todo para isso.

kenneth

Fala brow,

Pelo que entendi, voce quer ler uma string como “(3 + 5) * 2”, e executar essa expressao, gerando 16.
No Java nao existe algo como a funcao eval() do Javascript (ou se existe, nao conheco).

Entao voce teria que fazer o que o amigo acima falou, analisar a linha, quebrar os fatores e levar
em consideracoes precedencia de operadores (* e / vem antes de + e -) e de parenteses…

Abraco.

alexvingg

Grinvon, acho que você me entendeu errado, eu sei que meu exemplo não vai resolver o problema dele, mais
meu intuito foi abrir a mente dele com um exemplo para ele buscar outras formas baseada no meu exemplo ou
nos de outras pessoas …

andre_teprom

É uma pena que não tenha esse recurso.
Aqui os caras já implementaram isso :

http://w3eval.calcsharp.net/W3Eval.pdf

+++

ViniGodoy

No projeto towel há um avaliador de expressões bastante poderoso:

Você também pode usar a integração que o java tem com linguagens de script.

Agora, se isso é um trabalho de faculdade, e seu objetivo é calcular expressões no braço, procure pela teoria de pilha, notação infixa e pós-fixa, notação polonesa, e logo vc acabará caindo na teoria que te leva à resposta.

Criado 19 de abril de 2011
Ultima resposta 21 de abr. de 2011
Respostas 7
Participantes 6