Estou com dificuldade com metodos em poo

questao: - Crie uma classe para representar uma pessoa, com os atributos privados de nome, data de nascimento e altura. Crie os métodos públicos necessários para sets e gets e também um método para imprimir todos dados de uma pessoa. Crie um método para calcular a idade da pessoa. (minha variavel idadep esta dando 0, o resto ta dando certo, eu acho.);

public class PessoaQ1{
private String nome;
private String nas;
private float altura;
private int idadep;

public float getAltura(){
	return this.altura;
}
public void setAltura(float a){
	this.altura = a;
}	
public String getNome(){
	return this.nome;

}
public void setNome(String n){
	this.nome = n;
}	
public String getNas(){
	return this.nas;
}
public void setNas(String n2){
	this.nas = n2;
}	
public void Calcular(){
	String aux = String.valueOf(nas.charAt(6)+""+nas.charAt(7)+""+nas.charAt(8)+""+nas.charAt(9));
	int anoNas= Integer.parseInt(aux);
	int idade = 2021 - anoNas;
	String aux2 = String.valueOf(nas.charAt(3)+""+nas.charAt(4));
	int mes= Integer.parseInt(aux2);
	if (mes>02){
		idade= idade -1;
	}else{
		String aux3 = String.valueOf(nas.charAt(0)+""+nas.charAt(1));
		int dia= Integer.parseInt(aux3);
		if(dia>17){
			idade= idade-1;
		}
		
	}
	this.idadep = idade;
}
public void status(){
	System.out.println("SOBRE A PESSOA:");
	System.out.println("Nome: "+this.getNome());
	System.out.println("Altura: "+this.getAltura());
	System.out.println("Data de nascimento: "+this.getNas());
	System.out.println("idade: "+this.idadep);
}

}

classe principal:

public class Atvd3Q1{
public static void main(String[]args){
PessoaQ1 p1 = new PessoaQ1();
p1.setNome(“Maria”);
p1.setAltura(1.57f);
p1.setNas(“19/09/2003”);
p1.status();
}
}

É porque vc precisa invocar o método Calcular() em algum momento.

Olhando seu código eu achei que faz sentido invocá-lo dentro do método setNas() , porque ele “setaria” o nascimento e automaticamente já calcularia a idade. Ficaria assim:

public void setNas(String n2) {
  this.nas = n2;
  Calcular();
}
1 curtida

Porque PessoaQ1,não é bem mais legível ser simplesmente Pessoa?
Porque idadep, não pode ser simplesmente idade?
Porque nas, não é mais legível escrever nascimento?
O método Calcular() deveria ser calcular().

No seu código, quem inicializa o atributo idadep é o método Calcular(), mas você não chamou ele em nenhum momento.

public float getAltura(){
	return this.altura;
}
public void setAltura(float a){
	this.altura = a;
}	
public String getNome(){
	return this.nome;

}
public void setNome(String n){
	this.nome = n;
}	
public String getNas(){
	return this.nas;
}
public void setNas(String n2){
	this.nas = n2;
}	
public int Calcular(){
	String aux = String.valueOf(nas.charAt(6)+""+nas.charAt(7)+""+nas.charAt(8)+""+nas.charAt(9));
	int anoNas= Integer.parseInt(aux);
	int idade = 2021 - anoNas;
	String aux2 = String.valueOf(nas.charAt(3)+""+nas.charAt(4));
	int mes= Integer.parseInt(aux2);
	if (mes>02){
		idade= idade -1;
	}else{
		String aux3 = String.valueOf(nas.charAt(0)+""+nas.charAt(1));
		int dia= Integer.parseInt(aux3);
		if(dia>17){
			idade= idade-1;
		}
		
	}
	this.idadep = idade;
    return idade;
}
public void status(){
	System.out.println("SOBRE A PESSOA:");
	System.out.println("Nome: "+this.getNome());
	System.out.println("Altura: "+this.getAltura());
	System.out.println("Data de nascimento: "+this.getNas());
	System.out.println("idade: "+this.Calcular());
}

Como já citado anteriormente, você não chamou seu método em nenhum momento. Eu recomendaria você trocar o tipo do seu método de void para int, assim toda vez que você chamar esse método ele já retornaria a idade calculada e ficaria assim sua saida:
System.out.println("idade: "+this.Calcular());

1 curtida

é pq eu to fazendo uma lista de atividades então coloquei o Q1 na frente pra ficar mais facil quando eu for procurar a questão 1. obrigada pelas dicas

humm vdd. obrigada

1 curtida

entendi vou tentar aqui. muito obrigada

Conseguiu fazer os outros?