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
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
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
Tem certeza que Aluno alu é diferente de null?
Chegou a debugar?
[quote=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[/quote]
Era isso mesmo! Muito obrigado a todos que ajudaram!
Me enganei… Vou postar aqui todo o código, qualquer ajuda é bem vinda. Obrigado!
[code]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;
}[/code]
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
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
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
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];
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.
[quote=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];
[/quote]
Sim, claro! =D
Nem tinha percebido…
[quote=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.[/quote]
Exato!