Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Aula de Array - Não entendi e tenho duvidas. Por favor, me ajude.

Na aula de array não entendi porque tem que instanciar a classe Aluno toda vez. Instanciar a classe Aluno para f11.alunos[0] = new Aluno(); f11.alunos[1] = new Aluno(); f11.alunos[2] = new Aluno(); ...

Se a classe Turma foi instanciada e existe um array com a classe Aluno na classe turma, por que temos que instanciar a classe Aluno a cada linha fj11.alunos[0] = new Aluno(). Não entendi, por favor, alguem pode me explicar melhor esse assunto.

4 respostas

Olá, não sei se entendi bem sua dúvida. Espero que eu consiga ajudar....

Quando você cria um array da classe alunos ele ainda não possui nada. Cada posição deste array está vazia. Só pq você está criando e instanciando um array da classe Alunos, não quer dizer que ele está populado.

Ao criar um array da classe Aluno, você fazendo com que ele só possa receber objetos do tipo Aluno.

Se quiser incluir algo na posição 0 desse array vai ter que ser um Aluno, afinal de contas, foi esse o tipo do array que declarou.

Para que eu inclua um Aluno na posição 0 esse aluno que tem existir, para isso você tem que instanciar um objeto da classe Aluno:

Aluno aluno = new Aluno();

Agora minha variável aluno é de fato um objeto da classe aluno. Portanto, posso incluir na posição 0:

aluno[0] = aluno;

Se eu quiser, posso incluir esse mesmo aluno em todas as posições do array:

aluno[0] = aluno;
aluno[1] = aluno;

E se eu tiver alunos diferentes, tenho que instanciar um objeto da classe Aluno para cada um deles:

Aluno aluno_gustavo = new Aluno();
Aluno aluno_maria = new Aluno();
Aluno aluno_joao = new Aluno();

depois posso popular o array criado previamente:

aluno[0] = aluno_gustavo;
aluno[1] = aluno_maria;
aluno[2] = aluno_joao;

class Turma { Aluno[] alunos;

void imprimeNotas() { for(int i = 0; i < this.alunos.length; i++) { Aluno aluno = this.alunos[i]; if(aluno== null) continue; System.out.println(aluno.nota); } } }

class Aluno { String nome; int nota; }

class TesteDaTurma { public static void main(String[] args) { Turma fj11 = new Turma(); // Quando instancio a Turma, eu não estou instanciado o aluno ? fj11.alunos = new Aluno[10];

fj11.alunos[0] = new Aluno(); // Essa é a linha que estou falando // tem que criar uma instancia para cada aluno fj11.alunos[0].nome = "Mauricio"; fj11.alunos[0].nota = 9;

fj11.alunos[1] = new Aluno(); // Essa é a linha que estou falando // tem que criar uma instancia para cada aluno fj11.alunos[1].nome = "Marcelo"; fj11.alunos[1].nota = 5;

fj11.imprimeNotas();

} }

Duvidas:

Veja acima o código da aula de array. Na class Turma temos um array criado de Alunos: Alunos[] alunos

Na class TesteDaTurma Instanciamos a classe Turma: Turma fj11 = new Turma(); // Quando instancio a // Turma, eu não estou // instanciado o aluno ?

fj11.alunos[0] = new Aluno(); // Essa é a linha que // estou falando // tem que criar uma // instancia para cada // aluno ? fj11.alunos[0].nome = "Mauricio"; fj11.alunos[0].nota = 9;

fj11.alunos[1] = new Aluno(); // Essa é a linha que // estou falando // tem que criar uma // instancia para cada // aluno ? fj11.alunos[1].nome = "Marcelo"; fj11.alunos[1].nota = 5;

Na classe Turma você tem um array de objetos do tipo Aluno. Repare que não existe nenhuma instrução para definir o tamanho do array.Você faz isso com o comando:

Aluno[] alunos = new Aluno[10];

Com esse comando, você está reservando espaço na memória para guardar dez objetos do tipo Aluno. Agora, para cada aluno que você quiser inserir no array, você precisa instanciar antes, como o Gustavo mostrou acima.

solução!

Muito obrigado Marcos Fernando Simon e Gustavo Boff