Boa noite, estava vindo bem no curso, porém ao chegar nos arrays não entendi muito bem quando se quer passar eles como argumentos em uma classe... isso é normal?
Boa noite, estava vindo bem no curso, porém ao chegar nos arrays não entendi muito bem quando se quer passar eles como argumentos em uma classe... isso é normal?
Qual
Qual a sua dúvida cara?
Vetor não é difícil entender, uma coisa q faço quando estou com dúvida e voltar o mesmo vídeo dez vezes e precisar, as vezes perdemos o foco mesmo, é normal.
Leandro boa noite, o vetor propriamente dito não acho difícil, me complico quando começa a criar vetores de classes... mas valeu vou voltar o vídeo. abraço.
Olá, Bruno.
Vou tentar dirimir tua dúvida — que, pelo que vi, se trata de manipular arrays de tipos não-primitivos — com um exemplo simples.
Veja essas duas classes:
class Aluno {
String nome;
double notaEnade;
}
class Faculdade {
Aluno[] alunos;
}
Fica claro do que se trata, não? Um aluno tem nome e notaEnade; uma faculdade tem um array de alunos.
Dentro do método main
, então, vou começar a "dar vida" a essas classes; ou seja, criarei objetos a partir delas.
Primeiro, vou criar uma instância da faculdade; em seguida, gero um array do tipo Aluno
com 10 posições (por meio do new) e o atribuo à variável alunos
da faculdade:
class TestaFacul {
public static void main(String[] args) {
Faculdade f = new Faculdade();
f.alunos = new Aluno[10];
}
}
Perceba como, na definição da classe Faculdade
, a variável alunos
é do tipo array de Aluno
. Perceba também como, no método main
, eu crio um array de Aluno
(new Aluno[10]
) e o atribuo àquela variável alunos
da faculdade.
Agora, vamos gerar alguns objetos do tipo Aluno
, designando valores às suas variáveis em seguida:
Aluno a1 = new Aluno();
a1.nome = "Joao";
a1.notaEnade = 9.5;
Aluno a2 = new Aluno();
a2.nome = "Maria";
a2.notaEnade = 8;
Feito isso, vamos atribuir essas duas instâncias de Aluno
à variável alunos
da faculdade (f
); variável essa que, afinal, é um array do tipo Aluno
. Então:
f.alunos[0] = a1;
f.alunos[1] = a2;
Passamos o aluno a1
para a posição 0 do array e o aluno a2
para a posição 1.
Creio que, a partir daqui, entraremos na parte que tu sentes dificuldade.
Vamos criar uma classe chamada MEC
. Essa classe vai ter um método entitulado provaEnade
, que receberá um array de alunos e imprimirá os nomes e notas deles.
class MEC {
void provaEnade(Aluno[] participantes) {
for(int i = 0; i < participantes.length; i++) {
if(participantes[i] == null) {
continue;
}
System.out.println(participantes[i].nome);
System.out.println(participantes[i].notaEnade);
}
}
}
No método main
, criamos um objeto do tipo MEC
e passamos o array de alunos como argumento para o método provaEnade
:
MEC mec = new MEC();
mec.provaEnade(f.alunos);
Como podes ver, o método provaEnade
não retorna nada, por isso é void
. Ele recebe como argumento um array do tipo Aluno
chamado participantes
.
Dentro do método, esse array é iterado e os nomes e notas dos alunos nele contidos são impressos.
Caso fique dúvida: o .length
no ciclo for
é uma propriedade do array que provê o "comprimento" dele, ou seja, o tamanho.
Quanto à condição if
dentro do ciclo, ela serve para verificar se aquela posição do array que está sendo iterada é nula; caso seja, o continue;
força a próxima iteração do ciclo. Caso contrário, ocorreria um erro de execução (NullPointerException
), porque se tentaria imprimir uma posição de valor null
, isto é, que não está ocupada. Lembre que abastecemos o array com apenas dois alunos, alocados nas posições 0 e 1.
Espero que tenha ajudado. Abraço.
André show de bola!!!!
A explicação do André foi excelente! Aqui aproveitando 6 meses depois..
Muito boa sua explicação @André Vieira.