Olá, no tutorial de hoje vamos utilizar os conhecimentos recém adquiridos de arrays e aprimorar o sistema escolar que estamos desenvolvendo. Se você não é aluno do Formação Java Web, poderá ter acesso ao código do sistema por meio do GitHub do JDev Treinamento.

Iremos trabalhar com a classe de disciplinas, o objetivo é que cada vez mais a gente consiga aproximar o sistema do mundo real. Neste contexto, cada disciplina deverá receber quatro notas cada uma nota referente a um bimestre do ano. Dessa forma, um aluno pode ter várias disciplinas, mas cada disciplina só poderá ter quatro notas.

Portanto, vamos transformar a declaração do atributo nota na declaração de um array de quatro elementos, do tipo double. A nova declaração ficará assim estruturado.

private double[4] notas = new double[4];

O passo seguinte será gerar novos métodos getters and setters depois de termos apagado o que estava implementado. Clique com o botão direito em uma área livre e escolha as opções source => Generate Getters and Setters

Se tiver como eu apagado por engano também os getters and setters de disciplina, gere-os novamente. Após isso a IDE acusará erro nos métodos HashCode e Equals, apague-os e os gere novamente. Lembrando que para gerá-los, semelhante aos métodos getters and setters, Clique com o botão direito em uma área livre e escolha as opções source => Generate HashCode and Equals…

Como era de se esperar sempre que fazemos uma alteração no código, esta alteração, não raro repercute em outras partes do código. Assim, é preciso avaliar e proceder com as devidas correções.

Observe que um erro foi apontado na classe Aluno, onde regatamos a nota para soma-las e posteriormente retornar a média das notas.

somaNotas += disciplina.getNota();

IMPLEMENTANDO NOVO MÉTODO

Acontece que agora, temos na classe Disciplina um array que recebe as quatro notas. Então uma possível solução é criarmos dentro desta classe um método que receberá as quatro notas e as somará, retornando a média das quatro notas.

O método getMediaNotas que iremos implementar terá visibilidade publica, será do tipo double. Em seu escopo terá um for para varrer o vetor e somar as notas. O método retornará a média das notas.

Após a implementação do método, na classe Aluno, corrigiremos a linha de código que apontou o erro.

somaNotas += disciplina.getMediaNotas();

Ressaltando que na classe Aluno a alteração que realizamos ocorreu no método “getcalculaMedia()”. Este método recebe a média de cada disciplina e calcula a média entre as disciplinas.

A classe executável PrimeiraClasseJava apontou um erro, mas você pode por hora desconsiderá-lo. Ela é a nossa classe de teste e não iremos utilizá-la agora. No contexto dos nossos exercícios, nós a utilizamos realizar os testes de funcionamento do sistema que está sendo desenvolvido.

Para esta nossa implementação utilizaremos a classe ArrayVetor, nela instanciaremos o objeto aluno. Set para o aluno o “nome” e o “nome da escola”.

Aluno aluno = new Aluno();

Instancie também o objeto disciplina, para qual atribuiremos o “nome da disciplina” e as “notas”.

Disciplina disciplina = new Disciplina(); 
disciplina.setdisciplina("Java");

E como temos um array para notas, então criaremos um para atribuir os valores da nota para só então setá-lo.

double[] notas = {6.5, 4.5, 8.5, 2.5};
disciplina.setNotas(notas);

RELACIONANDO OBJETOS

OS objetos aluno e disciplina, estão no momento sem se relacionar um com outro. E para resolver este problema, iremos pegar(get) a disciplina em questão e adicioná-la à lista de disciplinas do aluno.

Aluno.getDisciplinas().add(disciplina);

E do mesmo modo poderemos adicionar quantas disciplinas desejarmos, porém, devemos apenas nos lembrar de distinguir notas e disciplinas entre si. Algo como notas1 e notas2. Fica o desafio para você.

PERCORRENDO ARRAYS E LISTAS

Agora queremos extrair os dados recebidos. E, note que iremos trabalhar com conceitos de objetos, listas e arrays. Isto é, trata-se de todo conhecimento adquirido até o momento, porém sendo interligados, um fazendo sentido junto ao outro.

Neste momento temos apenas um objeto, o que nos permite trabalhar diretamente com as listas de disciplinas. Assim sendo, criaremos um for para percorrer essa lista que está sendo trazida do objeto aluno.

System.out.println(“NOME ALUNO:” +aluno.getNome());

for(Disciplina disc : aluno.getDisciplinas()){
System.out.print(disc.getDisciplinas());
}

Fora do laço de repetição for, poderemos exibir o nome, a escola, o curso e qualquer informação que você queira adicionar a ficha do aluno. Fica para você o desafio de implementar as demais informações.

E depois de termos percorrido a lista de disciplinas, queremos também associar as notas obtidas a disciplina correspondente. Para isso implementaremos uma segunda estrutura de repetição, porém, será um for aninhado.

for(int pos = 0; pos < disc.getNota().length; pos++){
System.out.print("-" +disc.getNota()[pos]);
}

O que fizemos acima foi pegar a disciplina do aluno e varrer as notas. Isto é, pegamos a disciplina Java e varremos o for listando todas as notas referente a disciplina. E claro, temos que informar a posição da nota que desejamos exibir, sem a variável de controle [pos], não seria possível exibir todas as notas.

Se adicionarmos uma segunda disciplina, depois de toda iteração para a primeira disciplina, seria dado início a leitura da segunda disciplina.

EM POUCAS PALAVRAS

O que fizemos neste tutorial além de oportunizá-lo a exercitar a implementação de arrays, compreende também um importantíssimo exercício de lógica. E ainda nos confere a oportunidade de unirmos todo o conhecimento adquirido, como objeto, listas e dentro da lista trabalhamos com os arrays. Adicionamos dados e unimos tudo para a impressão no console.

É fundamental que você, aluno do Formação Java Web não avance para a próxima aula sem ter compreendido o que fizemos hoje. Revisamos a varredura de listas, aprendemos a varrer, e por fim unimos os dois conceitos para exibir uma resposta ao usuário.

Então é isso, estude, pratique. E nos vemos no próximo tutorial.