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