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

Dúvida no Ex. 5 da Aula 4 - Arrays - Desanimo no entendimento de vetores

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?

8 respostas

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.

soluçã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.