Atividade-Java (Orientação a objeto)

4 respostas
java
A

Boa noite,

Sou iniciante em programação orientada a objetos (utilizando java), estou realizando o seguinte código:

<strong>public class Data</strong> {

private int dia;

private int mes;

private int ano;
//método construtor

public Data(int d, int m, int a){
    this.setDia(d);
    this.setMes(m);
    this.setAno(a);
}

public Data(int d , int m){
    this(d,m,0);
}

public Data(int d){
    this(d, 0);
}

public Data(){
    this(0);
}

// métodos de encapsulamento da classe
  public int getDia(){              //método de acesso
      return dia;
  }
  
  public void setDia(int dia){      //metodo de modificação
      if(dia>=1 && dia<=31){
      this.dia = dia;
      }
      else{
         // System.err.println("Dia informado invalido.");
          this.dia=1;
      }
  }
  
  public int getMes(){
      return mes;
  }
  
  public void setMes(int mes){
      if(mes>=1 && mes<=12){
      this.mes=mes;
      }
      else{
          //System.err.println("Mês informado invalido.");
          this.mes=1;              
      }
  }
  
  public int getAno(){
      return ano;
  }
  
  public void setAno(int ano){
      this.ano=ano;
  }
  

public void mostrarData(){
    System.out.printf("%02d/%02d/%04d\n",dia, mes,ano);
}

}

<strong>public class Pessoa {</strong>

private int cpf;

private String nome;

private Data dataNascimento;
public int getCpf(){
    return cpf;
}


public void setCpf(int cpf){
    this.cpf=cpf;
}


public  String getNome(){
    return nome;
}


public void setNome(String nome){
    this.nome=nome;
}


public Data getDatanascimento(){
    return dataNascimento;
}



public void setDatanascimento(Data dataNascimento){
    this.dataNascimento=dataNascimento;
}

void mostrarData(){
    System.out.println("CPF: "+cpf);
    System.out.println("Nome: "+nome);
    System.out.print("Data nascimento: ");
    dataNascimento.mostrarData();
}
        }

public class PrincipalPessoa {

Data dt = new Data();
    Pessoa obj = new Pessoa();
    Scanner input = new Scanner(System.in);
    
public static void main(String[] args) {

    Scanner entrada = new Scanner(System.in);
    PrincipalPessoa novoObj = new PrincipalPessoa();
    int op = 0;
    while (op != 3) {

        System.out.print("1-Cadastrar");
        System.out.println("");
        System.out.print("2-Imprimir");
        System.out.println("");
        System.out.print("Escolha uma opção: ");

        op = entrada.nextInt();

        switch (op) {

            case 1:
                novoObj.Cadastrar();
                break;

            case 2:
                novoObj.Imprimir();
                break;

        }

    }

}

void Cadastrar() {
    

    System.out.print("Entre com o Nome: ");
    String Nome = input.nextLine();
    obj.setNome(Nome);

    System.out.print("Entre com o CPF: ");
    int Cpf = input.nextInt();
    obj.setCpf(Cpf);

    System.out.print("Entre com o Dia do nascimento: ");
    int D = input.nextInt();
    dt.setDia(D);

    System.out.print("Entre com o Mês de nascimento: ");
    int M = input.nextInt();
    dt.setMes(M);

    System.out.print("Entre com o Ano do nascimento: ");
    int A = input.nextInt();
    dt.setAno(A);
}

void Imprimir() {
   this.obj.mostrarData();
    System.out.println();
   
}

}

A primeira classe(Data), é para fazer a validação da data de nascimento. Não estou conseguido exibir a data de nascimento no método void imprimir, gostaria de saber como faço isso. Desde já agradeço.

4 Respostas

A
Bom dia, o erro está no método

public void mostrarData(){

System.out.printf("%02d/%02d/%04d\n",dia, mes,ano);

}

Não se utiliza printf no java, e sim println, ou printl.

Tendo em vista que você utilizou tres variáveis do tipo int, terá que concatenar dentro do System.out.println().

public void mostrarData(){

System.out.println(dia + - + mes + - + ano);

}

Também vale ressaltar que na classe PrincipalPessoa , você deve utilizar todos os métodos como estáticos, pois como o metodo main() ja é estatico, todos os outros métodos da classe devem ser obrigatoriamente também estáticos.

A

Fiz as alterações sugeridas, mas ainda não consegui exibir a data de nascimento . Após cadastrar e escolher a opção imprimir aparece a seguinte mensagem Exception in thread “main” java.lang.NullPointerException.

J

Boa noite. Você está instanciando e populando um novo objeto Data na classe PrincipalPessoa e no método mostrarData() você acessa os valores do objeto Data instanciado na classe Pessoa, por isso o nullpointerexception, ele está sem valor algum. Tente fazer o seguinte, na declaração da variável data na classe pessoa deixe assim:

public class Pessoa{

Data dataNascimento = new Data();

E “sete” os atributos da classe Data pela instancia da classe Pessoa. Ex:

obj.getDatanascimento().setDia(D);

obj.getDatanascimento().setAno(A);

A

Deu certo, obrigado pela ajuda.

Criado 24 de fevereiro de 2017
Ultima resposta 5 de mar. de 2017
Respostas 4
Participantes 3