Ajuda com Polimorfismo, por favor

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!

[code]//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;
          }
   }[/code]

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… :slight_smile:

Desde já muito obrigado!

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.

[quote=discorpio]Boa noite Paulovc.

que tal usar assim:

[code]

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;
};
[/code][/quote]

Beleza!! Muito obrigado

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

Não ficou repetitivo?

Valeu