Ajuda - O que está errado?

11 respostas
M
Aluno alunos[] = new Aluno[maxAlunos];
public boolean inscreveAluno(Aluno alu)

E o compilador sempre retorna:
java.lang.NullPointerException
at Turma.inscreveAluno(Turma.java:46)

referente a:

alunos[totalAlunos] = alu;

xxxxxxxxxxxxxxxxxxxxxx

11 Respostas

J

Você tem que instanciar cada posição do seu vetor de Aluno, caso contrário nao será possível manipular nenhuma posição desse vetor;

voce pode fazer isso usando um laço for que vai até alunos.length, mais ou menos assim:

for(int i=0; i<alunos.length; i++){
   alunos[i] = new Aluno();
}

espero ter ajudado.
[]`s

ramilani12

Tem certeza que Aluno alu é diferente de null?
Chegou a debugar?

M

josiani.lm:
Você tem que instanciar cada posição do seu vetor de Aluno, caso contrário nao será possível manipular nenhuma posição desse vetor;

voce pode fazer isso usando um laço for que vai até alunos.length, mais ou menos assim:

for(int i=0; i<alunos.length; i++){
   alunos[i] = new Aluno();
}

espero ter ajudado.
[]`s

Era isso mesmo! Muito obrigado a todos que ajudaram!

M

Me enganei... Vou postar aqui todo o código, qualquer ajuda é bem vinda. Obrigado!

public class Turma
{
    private int codigoTurma;
    private int maxAlunos;
    private Aluno alunos[];
    private Professor professor;
    private int totalAlunos = 0;
    
    //construtor
    public Turma(int cod, int max, Professor prof)
    {
        codigoTurma = cod;
        maxAlunos = max;
        professor = prof;
        
        Aluno alunos[] = new Aluno[totalAlunos];

        for(int i=0; i<alunos.length; i++)
        {  
            alunos[i] = new Aluno(0, "");  
        }
    
    }

    //metodos
    public boolean inscreveAluno(Aluno alu)
    {
        boolean retorno = true;

        if(totalAlunos>=maxAlunos)
        {
            retorno = false;   
        }
        else if(totalAlunos < maxAlunos)
        {
            alunos[totalAlunos] = alu;
            totalAlunos++;
            retorno = true;
        }   
        return retorno;
    }
A

vamo lá cara… seguinte:

1-como vc está usando a sua classe Turma? ela foi instanciada num método main (correto?);

2-pelo que percebi, você tem um atributo chamado totalAlunos que é criado com zero toda vez que você instancia a classe Turma em algum lugar. Sendo assim, salvo engano da minha parte, o teu construtor sempre cria um array de alunos de tamanho 0 (zero);

3-toda vez que você invoca o método inscreveAluno(), teu totalAlunos tem o valor zero e cai no segundo if (a menos que o maxAlunos seja passado negativo no teu construtor);

Dá uma olhada nessas três coisas e me mostra onde você está usando (chamando) o inscreveAluno().

Espero ter ajudado…

até!

adriano iurk

U

Cara, nem li todos os posts aqui, hehe, mas queria deixar a dica pra vc tentar usar o DEBUG da sua IDE… (Ecplipse? NetBeans?) É uma boa hora!
Ajuda bastante. E NullPointerException é uma das (ou A) excessão mais chata do Java…
rs

[]s

U

Opa, mas acho que encontrei teu erro…

//...
  private int totalAlunos = 0;  
       
     //construtor  
     public Turma(int cod, int max, Professor prof)  
     {  
         codigoTurma = cod;  
         maxAlunos = max;  
         professor = prof;  
           
         Aluno alunos[] = new Aluno[totalAlunos];  // VC TÁ CRIANDO UM ARRAY COM TAMANHO 0 !
   
         for(int i=0; i<alunos.length; i++)  
         {    
             alunos[i] = new Aluno(0, "");    
         }  
       
     }  

//...

[]s

Migore

Não é só isso uchoaaa, ele ta criando uma instância local do array alunos no construtor, ou seja, o atributo (o array alunos) da classe não foi inicializado.
E troca totalAlunos por max, que teu totalAlunso é zero.

alunos = new Aluno[max];
Shelson

qual o esforço de se pesquisar sobre vetores e instanciação de classes ?

resumidamente, nullpointer exception - referência a um objeto não criado - null.

U

Migore:
Não é só isso uchoaaa, ele ta criando uma instância local do array alunos no construtor, ou seja, o atributo (o array alunos) da classe não foi inicializado.
E troca totalAlunos por max, que teu totalAlunso é zero.

alunos = new Aluno[max];

Sim, claro! =D
Nem tinha percebido…

U

Shelson:
qual o esforço de se pesquisar sobre vetores e instanciação de classes ?

resumidamente, nullpointer exception - referência a um objeto não criado - null.

Exato!

Criado 3 de julho de 2008
Ultima resposta 7 de jul. de 2008
Respostas 11
Participantes 7