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

duvida em atributos - java iniciante

Boa noite galera, estou começando em java e a minha duvida é o seguinte: o que eu fiz de errado na hora de linkar "moradia" à classe "Professor"? se possivel comemtem a forma correta do codigo,desde já agradeço.

import java.util.Scanner;

public class universidade {

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        class Endereco {
            int CEP;
            String pontoDeReferencia;
            String regiao;
            String enderecoCompleto;
        }

        class Aluno {
            String nome;
            int cpf;
            int idade;
            int rg;
            Endereco CEP;
            Endereco pontoDeReferencia;
            Endereco complemento;
            Endereco enderecoCompleto;
        }

        class Professor {
            String nome;
            int cpf;
            int idade;
            int rg;
            Endereco moradia;

        }

        Professor[] vetProfessor = new Professor[5];
        Scanner leitor = new Scanner(System.in);

        Endereco moradia = new Endereco();
        vetProfessor = moradia;
        //nao consigo linkar moradia à classe professor


        for (int posicao = 0; posicao < vetProfessor.length; posicao++) {
            vetProfessor[posicao] = new Professor();
            System.out.println("Digite o nome do professor : ");
            vetProfessor[posicao].nome = leitor.nextLine();
            System.out.println("Digite o cpf do professor : ");
            vetProfessor[posicao].cpf = leitor.nextInt();
            System.out.println("Digite o RG do professor : ");
            vetProfessor[posicao].rg = leitor.nextInt();
            System.out.println("Digite o CEP do professor : ");
            vetProfessor[posicao].moradia.CEP = leitor.nextInt();
            System.out.println("Digite a idade do professor : ");
            vetProfessor[posicao].idade = leitor.nextInt();

            System.out.println("============================================");
            System.out.println("DADOS DO PROFESSOR : ");
            System.out.println("Nome : " + vetProfessor[posicao].nome);
            System.out.println("CPF : " + vetProfessor[posicao].cpf);
            System.out.println("RG : " + vetProfessor[posicao].rg);
            System.out.println("Idade : " + vetProfessor[posicao].idade);
            System.out.println("============================================");
            System.out.print("\n");

            leitor.nextLine();// GAMBIRA do java
        }

    }

}
4 respostas

Oi David,

nesse trecho de código:

Professor[] vetProfessor = new Professor[5];
Scanner leitor = new Scanner(System.in);

Endereco moradia = new Endereco();
vetProfessor = moradia;
//nao consigo linkar moradia à classe professor

você instanciou um vetor de Professor, ou seja, uma matriz com 5 objetos Professor. Quem tem endereço é um objeto professor, não um vetor.

Você vai conseguir atribuir um endereco a um professor se instanciar um só:

Professor professor = new Professor();
Scanner leitor = new Scanner(System.in);

Endereco moradia = new Endereco();
professor.moradia = moradia;

Você compreendeu?

Eu entendi seu codigo Tais , mas eu queria que "Professor" ficasse como vetor ( pois vou adicionar 5 professores ) , a chamada que estou tentando fazer é essa :

System.out.println("Digite o CEP do professor : ");
professor[posicao].moradia.CEP = leitor.nextInt();

*professor1 -> moradia -> CEP

*professor2 -> moradia -> CEP

*professor3 -> moradia -> CEP

*professor4 -> moradia -> CEP

*professor5 -> moradia -> CEP

import java.util.Scanner;

public class universidade {

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        class Endereco {
            int CEP;
            String pontoDeReferencia;
            String regiao;
            String enderecoCompleto;
        }

        class Aluno {
            String nome;
            int cpf;
            int idade;
            int rg;
            Endereco CEP;
            Endereco pontoDeReferencia;
            Endereco complemento;
            Endereco enderecoCompleto;
        }

        class Professor {
            String nome;
            int cpf;
            int idade;
            int rg;
            Endereco moradia;

        }


        //criacao de 5 "professores"
        Professor[] professor = new Professor[5];

        //codigo editado
        Professor professor = new Professor();
        Scanner leitor = new Scanner(System.in);

        Endereco moradia = new Endereco();
        professor.moradia = moradia;
        //codigo editado

        //mas o codigo nao funciona para multiplos professores


        for (int posicao = 0; posicao < professor.length; posicao++) {
            professor[posicao] = new Professor();
            System.out.println("Digite o nome do professor : ");
            professor[posicao].nome = leitor.nextLine();
            System.out.println("Digite o cpf do professor : ");
            professor[posicao].cpf = leitor.nextInt();
            System.out.println("Digite o RG do professor : ");
            professor[posicao].rg = leitor.nextInt();
            System.out.println("Digite o CEP do professor : ");
            professor[posicao].moradia.CEP = leitor.nextInt();
            System.out.println("Digite a idade do professor : ");
            professor[posicao].idade = leitor.nextInt();

            System.out.println("============================================");
            System.out.println("DADOS DO PROFESSOR : ");
            System.out.println("Nome : " + professor[posicao].nome);
            System.out.println("CPF : " + professor[posicao].cpf);
            System.out.println("RG : " + professor[posicao].rg);
            System.out.println("Idade : " + professor[posicao].idade);
            System.out.println("============================================");
            System.out.print("\n");

            leitor.nextLine();// GAMBIRA do java
        }

    }

}
solução!

Certo David! Então vamos lá.

Neste caso, seu vetor possui vários objetos professor. Cada professorpossui uma referência a um objeto moradia, mas ele não possui esse objeto. O erro que está dando (NullPointerException) está ligado ao fato de que o professor busca o objeto Endereco mas este está nulo, pois não foi instanciado.

Seu código ficaria exatamente assim:

...    
    // classe Endereco
    //classe Aluno
    //classe Professor

    //criacao de 5 "professores"
    Professor[] vetprofessor = new Professor[5];
    Scanner leitor = new Scanner(System.in);

    for (int posicao = 0; posicao < vetprofessor.length; posicao++) {
         vetprofessor[posicao] = new Professor();
        System.out.println("Digite o nome do professor : ");
        vetprofessor[posicao].nome = leitor.nextLine();
        System.out.println("Digite o cpf do professor : ");
        vetprofessor[posicao].cpf = leitor.nextInt();
        System.out.println("Digite o RG do professor : ");
        vetprofessor[posicao].rg = leitor.nextInt();
        System.out.println("Digite o CEP do professor : ");
        Endereco endereco = new Endereco();
        endereco.CEP = leitor.nextInt();
        vetprofessor[posicao].moradia = endereco;
        System.out.println("Digite a idade do professor : ");
        vetprofessor[posicao].idade = leitor.nextInt();

    //prints
  • Instanciei um objeto Endereco dentro do for, pois cada professor precisa de um objeto só seu.

  • Atribui a informação do leitor para o cep do objeto endereco instanciado.

  • Feito isso, fiz com que a referencia moradia do professor apontasse para este objeto.

Eu rodei aqui, e funcionou! Testa e me diz se é isso ;)

Boa noite, David! Como vai?

A Tais já matou a charada mto bem! Mas, só fazendo um adendo ao que ela falou, pra que fique claro pq o seu código não funcionou antes, vamos dar uma olhada nesse trecho do seu código:

Professor[] vetProfessor = new Professor[5];
Scanner leitor = new Scanner(System.in);

Endereco moradia = new Endereco();
vetProfessor = moradia;

Veja que na primeira linha vc criou um vetor de professores chamado vetProfessor. E na última linha vc tentou atribuir nesse vetor um objeto do tipo Endereco, por isso seu código não estava funcionando! Por causa dos tipos diferentes!

Daí para resolver isso, aí é só mandar ver da forma como a Tais muitíssimo bem te orientou!

Grande abraço e bons estudos!