Dividir método em métodos menores

2 respostas
F

Fiz um programinha q gera algumas expressões, le dados e as grava em um arquivo
até ai tudo bem, meu programa funciona numa boa
Mas o problema é q eu fiz tudo em um método só
fazendo com q o metodo ficasse um pouco extenso
Queria q alguém me ajudasse a dividir esse método em outros 3 mais ou menos,
pois ja tentei e ñ obitive muito sucesso

import java.io.BufferedReader;
   import java.io.File;
   import java.io.FileReader;
   import java.io.FileWriter;
   import java.io.IOException;
   import java.io.PrintWriter;
   import java.io.StreamTokenizer;


    public class Programa {

       public static void LeeCalc() throws Exception {
         File file = new File("entrada.txt");
         PrintWriter escrever = new PrintWriter(new FileWriter("saida.txt"));
         Pilha p = new Pilha();
         Pilha Paux = new Pilha();
         Fila f = new Fila();
         String termo = " ";
         String aux = " ";
         String id = " ";
         try {
            FileReader reader = new FileReader(file);
            BufferedReader buffer = new BufferedReader(reader);
            StreamTokenizer st = new StreamTokenizer(buffer);
            st.resetSyntax();
            st.whitespaceChars(0,' ');
            st.wordChars(' '+1, 255);
            st.nextToken();
            termo = st.sval;
         //QUERIA QUE UM METODO FOSSE O Q ESTA DENTRO DESTE IF
            if (termo.equals("I")){
               
               id = "P "; 
               st.nextToken();
               while(st.ttype != StreamTokenizer.TT_EOF){
                  termo = st.sval;
                  if((termo.equals("/"))||(termo.equals("*"))||(termo.equals("!"))
                  	||(termo.equals("pow"))||(termo.equals("+"))||(termo.equals("-"))
                  	||(termo.equals("("))||(termo.equals(")"))){
                  
                     if (p.vazia()){
                        p.inserir(termo);
                     }
                     else if((termo.equals("+"))||(termo.equals("-"))){
                        if( p.retornaTopo().equals("/")||p.retornaTopo().equals("*")
                        	||p.retornaTopo().equals("!")||p.retornaTopo().equals("pow")){
                        
                           while(!p.vazia()){
                              Paux.inserir(p.remover());
                           }
                           Paux.inserir(termo);
                           while(!Paux.vazia()){
                              p.inserir(Paux.remover());
                           }
                        }
                        else{
                           p.inserir(termo);
                        }
                     }
                     else if((termo.equals("*"))||(termo.equals("/"))){//verifica  se o termo lido atual é "*" ou "/"
                        if((p.retornaTopo().equals("!"))||(p.retornaTopo().equals("pow"))){
                        
                           while(!p.vazia()){ // se for desvazia a pilha e coloca numa auxiliar
                              Paux.inserir(p.remover()); // logo depois volta para a pilha inicial
                           }
                           Paux.inserir(termo);// verifica se o topo.seguinte é pow ou fatorial
                           while(!Paux.vazia()){
                              p.inserir(Paux.remover());
                           }
                        }
                        else{
                           p.inserir(termo);
                        }
                     }
                     else if((termo.equals("!"))||(termo.equals("pow"))){// verifica se o termo lido atual é 
                        p.inserir(termo); // fatorial ou potencia e insere o termo no topo da pilha.
                        st.nextToken();
                     }
                     else{					
                        p.inserir(termo);	
                     }
                  //	--------------------------------fim da verificação deoperadores.						
                  }
                  else if ((!termo.equals("/")) && (!termo.equals("*")) && (!termo.equals("!"))
                  	&& (!termo.equals("pow")) && (!termo.equals("+")) && (!termo.equals("-"))
                  	&& (!termo.equals("(")) && (!termo.equals(")"))) { 
                     f.inserir(termo);
                  }
                  st.nextToken();
               }
            }
            //	QUERIA QUE UM METODO FOSSE O Q ESTA DENTRO DESTE ESLSE IF
            else if (termo.equals("P")){
               
               id = "I "; 
               String op1,op2,concatena;
               op1 = op2 = concatena = " ";
               st.nextToken();
               while(st.ttype != StreamTokenizer.TT_EOF){
                  termo = st.sval;
               
                  if(p.vazia()){
                     p.inserir(termo);
                  }
                  
                  else if(termo.equals("!")){
                     op1 = p.remover();
                     concatena = "( " + op1 + " " +termo + " )";
                     p.inserir(concatena);
                  }
                  else if((termo.equals("/"))||(termo.equals("*"))||(termo.equals("pow"))
                  	||(termo.equals("+"))||(termo.equals("-"))){
                     op1 = p.remover();
                     op2 = p.remover();
                     concatena = "( " + op2 + " " +termo + " " + op1 + " )";
                     p.inserir(concatena);
                  
                  }
                  else if ((!termo.equals("/")) && (!termo.equals("*")) && (!termo.equals("!"))
                  	&& (!termo.equals("pow")) && (!termo.equals("+")) && (!termo.equals("-"))
                  	&& (!termo.equals("(")) && (!termo.equals(")"))) {
                     p.inserir(termo);
                  
                  }
                  else{
                     p.inserir(termo);
                  }
                  st.nextToken();
               }
            }
         }//FIM ELSE IF
             catch (IOException e) {
               e.printStackTrace();
            }
      
         String resultado = " ";
         while(!p.vazia()){
            f.inserir(p.remover());
         }
      
         while(!f.vazia()){
            String x = " ";
            x = f.remover(); 
            if((!x.equals("(")) && (!x.equals(")"))){
               resultado += " " + x;
            }
         }
      
         escrever.print(id);
         escrever.println(resultado.trim());
         escrever.close();

      }
   //	----------------------------------------------------------------------------------------
       public static void main(String[] args) throws Exception {
         LeeCalc();
      }
   }

Valeu, esse forum é 10

2 Respostas

K

Voce pode colocar as operacoes em metodos separados.

já vai reduzir bastante.

os if continuaram no seu nucleo principal.
se quiser melhorar ainda pode usar um pouco de polimorfismo pra ficar mais elegante.

F

kuesley:
Voce pode colocar as operacoes em metodos separados.

já vai reduzir bastante.

os if continuaram no seu nucleo principal.
se quiser melhorar ainda pode usar um pouco de polimorfismo pra ficar mais elegante.

O q é e como posso usar polimorfismo
e ñ tem jeito mesmo de colocar o que esta dentro do if na linha 31

if (termo.equals("I")){

e o q esta na linha 93 em dois métodos, se tiver gostaria q alguem me mostrasse como.

else if (termo.equals("P")){

Valeu

Criado 4 de abril de 2009
Ultima resposta 4 de abr. de 2009
Respostas 2
Participantes 2