Ajuda com Polimorfismo, por favor

2 respostas
paulovc

Galera, tô na área do encapsulamento e polimorfismo como eu disse no outro fórum pedindo ajuda.. rsrs

Sendo assim, ainda novato.. surgiu algumas pedras no caminho e dúvidas! Muitas solucionei aqui, mais uma vez obrigado!

E novamente, preciso da ajuda de vocês.. Por favor, vejam este código pronto para Buscar um registro no objeto!

//buscar
       public boolean verificarProduto(int xcodigo){
              if(this.codigo == xcodigo && (this.nome!="" && this.preco!=0)){
                      return true;
              }
              else {
                      return false;
              }
       }
       
       public boolean verificarProduto(String xnome){
              if(this.nome.equals(xnome) && (this.nome!="" && this.preco!=0)){
                      return true;
              }
              else {
                      return false;
              }
       }
Este é usando estes dois métodos:
//buscar
                                       System.out.println(">> Buscar: 1 - Por codigo, 2 - Por nome");
                                       entrada = scan.nextInt();
                                       System.out.printf(">> O que deseja fazer? ");
                                       entrada = scan.nextInt();
                                       if(entrada==1){
                                                      System.out.printf(">> Digite o codigo do produto: ");
                                                      Pcodigo = scan.nextInt();
                                                      for(int i=0;i<p_pa.getTotalCodigo();i++){
                                                              if(p_ap[i].verificarProduto(Pcodigo)){
                                                                  System.out.println(p_ap[i].getCodigo()+" - "+p_ap[i].getNome()+" - R$ "+p_ap[i].getPreco());
                                                                  b=1; 
                                                              }       
                                                      }
                                                      if(b==0){
                                                               System.out.println(">> Nao foi possivel encontrar algum registro com este codigo!");
                                                      }
                                                      System.out.println();
                                       }
                                       else if(entrada==2){
                                                      System.out.printf(">> Digite o nome do produto: ");
                                                      Pnome = scan.nextLine();
                                                      Pnome = scan.nextLine();
                                                      for(int i=0;i<p_pa.getTotalCodigo();i++){
                                                              if(p_ap[i].verificarProduto(Pnome)){
                                                                  System.out.println(p_ap[i].getCodigo()+" - "+p_ap[i].getNome()+" - R$ "+p_ap[i].getPreco()); 
                                                                  b=1; 
                                                              }       
                                                      }
                                                      if(b==0){
                                                               System.out.println(">> Nao foi possivel encontrar algum registro com este nome!");
                                                      }
                                                      System.out.println();
                                       }

Tá funcionando perfeitamente... O único problema que acho que tá mal feito! Tô usando um if para testar se o usuario deseja procurar por CODIGO ou por NOME.. É correto fazer isso??

Lembro-me do meu Professor dizendo que tem como criar métodos com parâmetros diferentes e que o próprio Java se encaixaria no devido lugar, certo! Como fazer isso? Polimorfismo? Podem melhorar meu código, por favor? Se vocês me ajudarem melhorando a Busca daí eu já consigo arrumar o Editar e o Excluir também.. :)

Desde já muito obrigado!

2 Respostas

discorpio

Boa noite Paulovc.

que tal usar assim:

System.out.println(">> Buscar: 1 - Por codigo, 2 - Por nome");   
   entrada = scan.nextInt();   
   System.out.printf(">> O que deseja fazer? ");   
   entrada = scan.nextInt();
   switch (entrada) {
          case 1:    
                     System.out.printf(">> Digite o codigo do produto: ");   
                     Pcodigo = scan.nextInt();   
                     for(int i=0;i<p_pa.getTotalCodigo();i++){   
                               if(p_ap[i].verificarProduto(Pcodigo)){   
                                  System.out.println(p_ap[i].getCodigo()+" - "+p_ap[i].getNome()+" - R$ "+p_ap[i].getPreco());   
                                  b=1;   
                               }         
                     }   
                     if(b==0) System.out.println(">> Nao foi possivel encontrar algum registro com este codigo!");   
                     System.out.println();   
                     break;                    
           case 2:   
                     System.out.printf(">> Digite o nome do produto: ");   
                     Pnome = scan.nextLine();   
                     Pnome = scan.nextLine();   
                     for(int i=0;i<p_pa.getTotalCodigo();i++){   
                        if(p_ap[i].verificarProduto(Pnome)){   
                            System.out.println(p_ap[i].getCodigo()+" - "+p_ap[i].getNome()+" - R$ "+p_ap[i].getPreco());   
                            b=1;   
                        }         
                     }   
                     if(b==0) System.out.println(">> Nao foi possivel encontrar algum registro com este nome!");   
                     System.out.println();   
                     break;     
        };

Na verdade o código e quase praticamente o mesmo, diferenciando-se apenas o desvio condicional switch do if…else, este código não está errado, isto é, quando se faz busca de registros em um vetor de dados, esta é uma das saídas a se utilizar, existe também um algorítimo o qual não estou lembrado agora de busca de registros por indexação, quanto a utilizar os métodos mencionados pelo seu professor, voce já o fez quando criou os métodos “public boolean…”. Se o vetor p_ap contiver poucos registros para se varrer com o “for”, como disse antes é uma saída, entretanto se o mesmo contiver pouco mais de 1000 registros ai a performance começa complicar.

paulovc
discorpio:
Boa noite Paulovc.

que tal usar assim:

System.out.println(">> Buscar: 1 - Por codigo, 2 - Por nome");   
   entrada = scan.nextInt();   
   System.out.printf(">> O que deseja fazer? ");   
   entrada = scan.nextInt();
   switch (entrada) {
          case 1:    
                     System.out.printf(">> Digite o codigo do produto: ");   
                     Pcodigo = scan.nextInt();   
                     for(int i=0;i<p_pa.getTotalCodigo();i++){   
                               if(p_ap[i].verificarProduto(Pcodigo)){   
                                  System.out.println(p_ap[i].getCodigo()+" - "+p_ap[i].getNome()+" - R$ "+p_ap[i].getPreco());   
                                  b=1;   
                               }         
                     }   
                     if(b==0) System.out.println(">> Nao foi possivel encontrar algum registro com este codigo!");   
                     System.out.println();   
                     break;                    
           case 2:   
                     System.out.printf(">> Digite o nome do produto: ");   
                     Pnome = scan.nextLine();   
                     Pnome = scan.nextLine();   
                     for(int i=0;i<p_pa.getTotalCodigo();i++){   
                        if(p_ap[i].verificarProduto(Pnome)){   
                            System.out.println(p_ap[i].getCodigo()+" - "+p_ap[i].getNome()+" - R$ "+p_ap[i].getPreco());   
                            b=1;   
                        }         
                     }   
                     if(b==0) System.out.println(">> Nao foi possivel encontrar algum registro com este nome!");   
                     System.out.println();   
                     break;     
        };

Beleza!! Muito obrigado

É melhor usar switch do que If neste caso? Meu código tá certinho?

Não ficou repetitivo?

Valeu

Criado 4 de junho de 2010
Ultima resposta 4 de jun. de 2010
Respostas 2
Participantes 2