Calculadora em pilha (estrutura de dados)

Disponível somente no TrabalhosFeitos
  • Páginas : 8 (1799 palavras )
  • Download(s) : 0
  • Publicado : 30 de novembro de 2012
Ler documento completo
Amostra do texto
//Importes do JAVA---------------------------------
import java.io.*;
import java.util.EmptyStackException;
import java.util.regex.Pattern;
import java.util.Stack;
//-------------------------------------------------

public class calculadora{

public calculadora(){ //Construtor calculadora

}//-------------------------------------------

public static StringimportarArquivo(){//Método de importação do arquivo de texto.

try{
FileReader arquivo = new FileReader("d:\\calculadora\\conta.txt");
BufferedReader lerArquivo = new BufferedReader(arquivo);
String infixa = lerArquivo.readLine(); //Variável infixa recebendo o arquivo e realizando sua leitura respectivamente.

return infixa; // retorno da variável infixa do tipo String.}catch(IOException a){

}
return null;
}//Fim do método de importação------------------------------------------------------------------------------------------------

public void imprimirPosFixa(String[] posfixa){ //INÍCIO DO MÉTODO DE IMPRESSÃO DA EXPRESSÃO POSFIXA---------------------------
System.out.print("\n");
System.out.print("Expressao Posfixa:");

for(int i=0;i<posfixa.length-1;i++){
if (posfixa[i] != null){
System.out.print(" "+posfixa[i]);
}
}
}//FIM DO MÉTODO DE IMPRESSÃO-------------------------------------------------------------------------------------------------

//INÍCIO DO MÉTODO DE CALCULO DAEXPRESSÃO-----------------------------------------------------------------------------------------
public static Double calculoDaExpressao(String exp){

String numeros = new String("\\d*");//Cria a variável numeros do tipo string especificando o tipo numérico.
String operadores = new String("-|/|\\+|\\*+"); //Cria variável operadores especificando os 4 "operadores".
Double resultado = 0.0; //Variável queestará recebendo o resultado dos calculos.

Stack<String> pilha = new Stack<String>(); // cria o objeto pilha do tipo Stack<String> <-- Classe de pilha criada automaticamente do JAVA.

String[] elementos = exp.split(" ");
int erro = 0;

for (String elemento : elementos){ // Variável "elemento" irá receber uma em uma dasposições do vetor de String "elementos" até chegar no final.

if(Pattern.matches(numeros, elemento)){// Se o elemento for do tipo numeros.
pilha.push(elemento);//Insere um elemento na pilha.
}

if(Pattern.matches(operadores, elemento)){ // Se o elemento for do tipo operadores realiza as operações abaixo.
Double aux;

switch(elemento.charAt(0)){//Operadores sempre serão uma String com 1 caracter (regex acima).
case '/':
aux = Double.parseDouble(pilha.pop());//Variável aux recebendo o elemento que está sendo removido da pilha de String convertendo para Double.
if(aux == 0.0){
erro = 1;
}else{
resultado = Double.parseDouble(pilha.pop()) / aux; //Variável resultadorecebendo o elemento que está sendo removido da pilha de String convertendo para Double dividido pela variável aux.
}
break;
case '*':
aux = Double.parseDouble(pilha.pop()); //Variável aux recebendo o elemento que está sendo removido da pilha de String convertendo para Double.
resultado = Double.parseDouble(pilha.pop()) * aux; //Variável resultadorecebendo o elemento que está sendo removido da pilha de String convertendo para Double dividido pela variável aux.
break;
case '+':
aux = Double.parseDouble(pilha.pop()); //Variável aux recebendo o elemento que está sendo removido da pilha de String convertendo para Double.
resultado = Double.parseDouble(pilha.pop()) + aux; //Variável resultado recebendo o elemento que...
tracking img