Encapsulamento não retorna valor... AJUDA!

8 respostas
paulovc

Galera ajuda, por favor!!!!

Preciso cadastrar, editar, remover e consultar os arquivos inserido em um objeto encapsulado...

Vou resumir ao máximo!!!

Consigo cadastrar por este código:
incluir ap[] = new incluir[999];
               if(entrada==1){
                    System.out.printf("> Digite o numero de alunos: ");
                    n = scan.nextInt();
                    System.out.println();
                    for(i=0;i<n;i++){
                        System.out.printf("> Digite o nome do aluno ("+(i+1)+"): "); 
                        nome = scan.next();
                        System.out.printf("> Digite a nota do aluno ("+(i+1)+"): ");
                        nota = scan.next();
                        ap[i] = new incluir(nome,nota);
                        System.out.println(ap[0].getNome()+" - "+ap[0].getNota());
                        System.out.println();
                    }
               }

Depois de inserido o valor ele retorna pelo getNome e getNota certinho....

Mas..................

O meu programa está preso a um While... caso o usuario não queira sair ele pode escolher outro valor de entrada...

Este valor de entrada seria: 1 = cadastrar . 2 = consultar . 3 = editar . 4 = excluir.

código de consultar:
else if(entrada==2){
              System.out.println(ap[0].getNome()+" - "+ap[0].getNota());    
                    //if(ap[0].searchNome("paulo")){
                    //     System.out.println("TRUEEEEEE");
                    //      System.out.println(ap[0].getNome()+" - "+ap[0].getNota());    
                    //}
               }

Quando cadastro e entro no while de novo para consultar da um erro no meu programa de: java.lang.NullPointerException...

Como posso reverter este problema??

O outro código do getNome e getNota está aqui:
public class incluir{    
       private String nome;
       private String nota;
       incluir(String xnome, String xnota){
                      this.setNome(xnome);
                      this.setNota(xnota);               
       }
       
       public void setNome(String nome){
              this.nome = nome;
       }
       public void setNota(String nota){
              this.nota = nota;
       }
       public boolean searchNome(String nome){
              if(this.nome.equals(nome)){
                           return true;           
              }
              else {
                           return false;
              }
       }
       
       public String getNome(){
              return this.nome;
       }                       
       public String getNota(){
              return this.nota;
       }
}

Agradeço desde já! OBRIGADO!!!!

8 Respostas

S

Post um dos seguintes métodos que vc fez, editar, remover ou consultar.
Pq que ao invés de vc usar array vc não utiliza ArrayList por exemplo.

BrunoBastosPJ

Provávelmente você teve este problema porque seus objetos não são automáticamente instânciados quando você cria um array…

Rode o código e veja o que acontece:

incluir[] incluir1 = new incluir[5];
for(int i=0; i<incluir1.length; i++) {
  System.out.println(incluir1[i]);
}

incluir[] incluir2 = new incluir[5];
for(int i=0; i<incluir2.length; i++) {
  incluir2[i] = new incluir();
  System.out.println(incluir2[i]);
}
paulovc
santos.fernando:
Post um dos seguintes métodos que vc fez, editar, remover ou consultar. Pq que ao invés de vc usar array vc não utiliza ArrayList por exemplo.

Ainda não fiz editar e remover..

mas o cadastrar, aparentemente, está funcionando e o consultar preciso arrumá-lo!!

tô colocando todos os meus métodos no incluir.java, veja

public class incluir{
   
       private String nome;
       private String nota;
       incluir(String xnome, String xnota){
                      this.setNome(xnome);
                      this.setNota(xnota);               
       }
       
       public void setNome(String nome){
              this.nome = nome;
       }
       public void setNota(String nota){
              this.nota = nota;
       }
       public boolean searchNome(String nome){
              if(this.nome.equals(nome)){
                           return true;           
              }
              else {
                           return false;
              }
       }
       
       public String getNome(){
              return this.nome;
       }                       
       public String getNota(){
              return this.nota;
       }
}

Veja se tô indo no caminho certo... por favor!!

Tá dando erro em: Quando cadastro e entro no while de novo para consultar da um erro no meu programa de: java.lang.NullPointerException...

Como posso reverter este problema??

Muito Obrigado!!

paulovc
BrunoBastosPJ:
Provávelmente você teve este problema porque seus objetos não são automáticamente instânciados quando você cria um array... Rode o código e veja o que acontece:
incluir[] incluir1 = new incluir[5];
for(int i=0; i<incluir1.length; i++) {
  System.out.println(incluir1[i]);
}

incluir[] incluir2 = new incluir[5];
for(int i=0; i<incluir2.length; i++) {
  incluir2[i] = new incluir();
  System.out.println(incluir2[i]);
}

O Primeiro for retorna null

E o segunda da erro nesta linha "incluir2[i] = new incluir();"

Como faço agora?

S

Leia essa apostila, vc vai aprender bem. Utilize ArrayList pra fazer o que vc quer.
apostila

BrunoBastosPJ

crie um construtor defaul para incluir :wink:

paulovc

santos.fernando:
Leia essa apostila, vc vai aprender bem. Utilize ArrayList pra fazer o que vc quer.
apostila

Tá bem! Já baixei e vou estudar aqui!

Muito obrigado!

BrunoBastosPJ, construtor default para incluir? pode me dar um exemplo, por favor! ainda tô apredendo encapsulamento!

[color=orange]EDIT:[/color] Cheguei do trabalho depois da escola e já pulei no pc pra estudar a apostila que o santos.fernando me indicou, hehe. Estudando… aprendi que um construtor default tem o mesmo nome da minha classe e é executado toda vez inicialmente. Certo? Agora surgiu uma dúvida… Porque criar um default? Qual seria a função dele?

Tô conseguindo cadastrar tudo certinho e fazer a contagem de quantos usuarios estão entrando com dados (valores de entrada: Nome e Nota) Mas não consigo exibir todos…

incluir[] ap2 = new incluir[999]; for(int i4=0; i4<incluir.getTotal(); i4++) { ap2[i4] = new incluir(); System.out.println(ap[i4].getNome()+" - "+ap[i4].getNome()+" - total: "+incluir.getTotal()); }
Os dados foram armazenados no objeto ap será que não precisa jogar tudo no ap2? Retorna sempre null pra mim
[color=orange]------------------------------------------------------------------------------------------[/color]

Mto mto obrigado!!

paulovc

GALERA!!!

Faltei na aula pra terminar meu projeto com mais calma… Finalmente, consegui resolver o problema do “null”

Eu tava instanciando o objeto toda vez dentro do while… aí ele cadastrava e quando retornava pra fazer a busca perdia tudo!!! Por isso eu conseguia exibir os valores após cadastrados…

tava assim…

while(...){ incluir[] ap = new incluir[999]; entrada = scan.nextInt(); if(entrada==1){ //cadastrar . . . } else if(...){ . . . } }

arrumei para:

incluir[] ap = new incluir[999]; while(...){ entrada = scan.nextInt(); if(entrada==1){ //cadastrar . . . } else if(...){ . . . } }

DEU CERTO!! Qualquer outra dúvida venho postar aqui porque tenho certeza que vocês saberão me ajudar!!

Valeu, galera! Vocês são os melhores!

Criado 31 de maio de 2010
Ultima resposta 2 de jun. de 2010
Respostas 8
Participantes 3