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

Dúvidas na classe Aluno, no 1º video!

Olá, não consegui entender, qual o objetivo da classe Aluno que contém os atributos nome, nota e como ela foi referenciada na classe TesteDaTurma. Se eu retiro a classe Aluno do programa, ele funciona da mesma forma...


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 TesteDaTurma {

    public static void main (String[] args ){



        Turma fj11 = new Turma();



        fj11.alunos = new Aluno[10];

        fj11.alunos[0] = new Aluno();
        fj11.alunos[0].nome = "Mauricio";
        fj11.alunos[0].nota = 9;

        fj11.alunos[1] = new Aluno();
        fj11.alunos[1].nome = "Rodrigo";
        fj11.alunos[1].nota = 8;

        fj11.alunos[2] = new Aluno();
        fj11.alunos[2].nome = "Cezar";
        fj11.alunos[2].nota = 10; 

        fj11.imprimeNotas();

    }

}

Att.: Rodrigo Pereira!

3 respostas

Olá tudo bem?

Provavelmente você já possui a classe compilada no seu computador, se você ir no diretório onde estão salvos os arquivos e deletar o ".class" da classe aluno então deve parar de funcionar.

solução!

Imagine o cenário : Você tem duas classes que fazem uso da estrutura aluno( o aluno possui nota e nome), o que seria mais inteligente: Criar dentro em cada uma das duas classes uma classe aluno ou criar uma classe genérica pra aluno e importar nos dois arquivos?

O mais inteligente a se fazer é criar uma classe genérica para funcionar nas duas, além de você escrever só uma vez ao invés de duas, imagine se tivesse que fazer uma modificação na classe aluno e essa classe tivesse nos dois arquivos? Você teria que modificar o arquivo duas vezes ao invés de modificar uma vez só na classe separada.

Resumindo: Nesse caso, a classe aluno nada mais é que uma estrutura genérica que contem o que o aluno tem: notas e nome . Assim toda vez que eu precisar de um aluno eu já tenho lá a classe pronta, sem eu precisar escrever ela novamente.

Questão de como a classe foi referenciada na classe turma

Perceba a estrutura da classe Turma :

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);

        }
    }

}

Perceba que dentro da classe a variável alunos nada mais é que um array de tamanho indefinido de aluno, ou seja o valor só vai ser definido na hora que eu inicializar a variável alunos.

Bom sabemos que precisa se inicializar a variável alunos para utilizar ela, e sendo um array eles se inicializam da seguinte forma :

nomeDavariavel = new tipoDaVariavel[10];

ou

tipoDavariavel nomeVetor[] = new tipoDavariavel[10];

ps:no lugar onde ta escrito tipoDaVariavel substitua pelo tipo da variável. Exemplo int, String, char, etc.. Logo quando no código você escreve

Turma fj11 = new Turma();
 fj11.alunos = new Aluno[10];

O computador entende como : Crie um objeto do tipo Turma e ponha na variável chamada fj11. Após isso vá e inicialize a variável alunos que é um array e agora o array vai ter um tamanho de 10, ou seja dentro dela vai caber 10 objetos do tipo Aluno.

Mas perceba que também é necessário inicializar esses 10 objetos do tipo aluno e no código já faz isso :

fj11.alunos[0] = new Aluno();

fj11.alunos[0] = new Aluno() quer dizer o seguinte: vá no array alunos e pegue a primeira posição dele(lembrando que a posição dos arrays começam em 0 e não em 1) e inicialize essa posição.

Perceba que isso ocorre com as outras posições :

Inicializando a segunda posição:

fj11.alunos[1] = new Aluno();

Inicializando a terceira posição :

fj11.alunos[2] = new Aluno();

. Ficou meio extenso mas espero ter ajudado!

Olá!

Muito Obrigado, Guilherme, de fato era só deletar o .class, acho que estou mal-acostumado, com o uso de IDE's que gerenciam essa questão.

Muito Obrigado, Leonardo Cezar, pela paciência ao detalhar o funcionamento de cada linha do código, foi fundamental para o entendimento correto.

Att.: Rodrigo Pereira.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software