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.