Problemas calcular a data?

3 respostas
jsnpereira

Boa tarde!

eu to fazendo o exercício no livro java - como programar 8 edição pagina 80 e capitulo 3.17

e ai tentamos fazer calcular a data por idade, tem alguns está erro de calculo e fico estranho…

public class HealthProfile {
	String nome;
	String sobrenome;
	String sexo;
	int dia;
	int mes;
	int ano;
	double altura;
	double peso;
	
	 public HealthProfile(String nome, String sobrenome,String sexo, int dia, 
			                    int mes, int ano, double altura, double peso){
		 
		 this.nome = nome;
		 this.sobrenome = sobrenome;
		 this.sexo = sexo;
		 this.dia = dia;
		 this.mes = mes;
		 this.ano = ano;
		 this.altura = altura;
		 this.peso = peso;
		 
	 }

	public String getNome() {
		return nome;
	}

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

	public String getSobrenome() {
		return sobrenome;
	}

	public void setSobrenome(String sobrenome) {
		this.sobrenome = sobrenome;
	}

	public String getSexo() {
		return sexo;
	}

	public void setSexo(String sexo) {
		this.sexo = sexo;
	}

	public int getDia() {
		return dia;
	}

	public void setDia(int dia) {
		this.dia = dia;
	}

	public int getMes() {
		return mes;
	}

	public void setMes(int mes) {
		this.mes = mes;
	}

	public int getAno() {
		return ano;
	}

	public void setAno(int ano) {
		this.ano = ano;
	}

	public double getAltura() {
		return altura;
	}

	public void setAltura(double altura) {
		this.altura = altura;
	}

	public double getPeso() {
		return peso;
	}

	public void setPeso(double peso) {
		this.peso = peso;
	}
	 
	 public int idade(){
		 
		 Calendar cal = Calendar.getInstance();
			
			int data = cal.get(Calendar.DAY_OF_MONTH);
			int mes = cal.get(Calendar.MONTH) +1 ;
			int ano = cal.get(Calendar.YEAR);
			
			int idade = ano - this.ano;
			
			if ( mes < this.mes){
				--idade;
			}
			else {
				if (data < this.dia){
					--idade;
				}
			}
			 return idade;
	 }
	 
	 public void displayMessage(){
			
			if(idade()>= 70){
				System.out.println("Zona alvo: 75 - 128 bpm \nMédia Máxima: 150 bpm" );
			} else {
				if(idade()>= 65){
					System.out.println("Zona alvo: 78 - 132 bpm \nMédia Máxima: 155 bpm" );
				} else {
					if(idade()>= 60){
						System.out.println("Zona alvo: 80 - 136 bpm \nMédia Máxima: 160 bpm" );
				
					} else {
						if(idade()>= 55){
							System.out.println("Zona alvo: 83 - 140 bpm \nMédia Máxima: 165 bpm" );
				
						}else {
							if(idade()>= 50){
								System.out.println("Zona alvo: 85 - 145 bpm \nMédia Máxima: 170 bpm" );
				
							} else {
								if(idade()>= 45){
									System.out.println("Zona alvo: 88 - 149 bpm \nMédia Máxima: 175 bpm" );
				
								}	else {
									if(idade()>= 40){
										System.out.println("Zona alvo: 90 - 153 bpm \nMédia Máxima: 180 bpm" );
				
									} else {
										if(idade()>= 35){
											System.out.println("Zona alvo: 93 - 157 bpm \nMédia Máxima: 185 bpm" );
				
										} else {
											if(idade()>= 30){
												System.out.println("Zona alvo: 95 - 162 bpm \nMédia Máxima: 190 bpm" );
											} else {
												if(idade()>= 25){
													System.out.println("Zona alvo: 98 - 166 bpm \nMédia Máxima: 195 bpm" );
				
												} 

											}

										}

									}

								}
							}

						}

					}

				}

			}
				
		}

outra clase para executar.

public class HealthProfileTest {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		
		DecimalFormat df = new DecimalFormat();
		df.applyPattern("00.00");
		
		Scanner sca = new Scanner(System.in);
		
		System.out.println("Nome: ");
		String nome = sca.nextLine();
		
		System.out.println("Sobrenome: ");
		String sobre = sca.nextLine();
		
		System.out.println("Sexo: ");
		String sexo = sca.nextLine();
		
		System.out.println("Dia que nasceu: ");
		int dia = sca.nextInt();
		
		System.out.println("Mês que nasceu: ");
		int mes = sca.nextInt();
		
		System.out.println("Ano que nasceu: ");
		int ano = sca.nextInt();
		
		System.out.println("Quando altura você tem: ");
		double altura = sca.nextDouble();
		
		System.out.println("Quando peso você tem: ");
		double peso = sca.nextDouble();
		
		HealthProfile hp = new HealthProfile(nome, sobre, sexo, dia, mes, ano, altura, peso);
		
		System.out.println();
		
		System.out.println("1)O DADO");
		System.out.println("Nome: "+hp.getNome()+
							"\nSobrenome: "+hp.getSobrenome()+
							"\nSexo: "+hp.getSexo()+
							"\nData de nascimento: "+hp.getDia()+"/"+hp.getMes()+"/"+hp.getAno()+
							"\nIdade: "+hp.idade()
							);
		
		
		System.out.println();
		System.out.println("2)IMC");
		System.out.printf("\nPeso: "+hp.getPeso()+
							"\nAltura: "+hp.getAltura()+
							"\nIMC: "+df.format(hp.imc())+
							"\nSituação: ");
		hp.displayImc();
		
		System.out.println();
		System.out.println("3)CONTROLE CARDIÁCO");
		System.out.println("Idade: "+hp.idade()+
							"\nSituação: ");
		hp.displayMessage();
		
		
	}

}

Fiz o teste digitando e esse fica o resultado, veja em baixo…

Nome:
jeison
Sobrenome:
pereira
Sexo:
masc
Dia que nasceu:
08
Mês que nasceu:
05
Ano que nasceu:
1982
Quando altura você tem:
1,54
Quando peso você tem:
45,5

1)O DADO
Nome: jeison
Sobrenome: pereira
Sexo: masc
Data de nascimento: 8/5/1982
Idade: 27

2)IMC

Peso: 45.5
Altura: 1.54
IMC: 19,19
Situação: Peso normal.

3)CONTROLE CARDIÁCO
Idade: 27
Situação:
Zona alvo: 98 - 166 bpm
Média Máxima: 195 bpm

veja a idade que fiquei estranho digitei a data 08/05/1982 é idade 28 anos mas a informação fica 27 anos. esse exercícios que fiz calcular data que peguei o exercícios que fiz antes estava funcionando corretamente e ai agora não funcionou? não estou entendo esse…

Espero que me ajude…

3 Respostas

E

Acho que deveria ser assim:

int idade = ano - this.ano;  
               
             if ( mes < this.mes){  
                 --idade;  
             } else if (mes == this.mes) {  
                 if (data < this.dia){  
                     --idade;  
                 }  
             }
jsnpereira

entanglement:
Acho que deveria ser assim:

int idade = ano - this.ano;  
               
             if ( mes < this.mes){  
                 --idade;  
             } else if (mes == this.mes) {  
                 if (data < this.dia){  
                     --idade;  
                 }  
             }

Testei e funcionou corretamente… obrigado!!!

Jhonny_Oliveira

jsnpereira, só uma observação.

Por mais que não seja digamos “elegante”, não seria melhor usar Switch/Case ao invés de trocendos If/Else???

Criado 1 de julho de 2010
Ultima resposta 2 de jul. de 2010
Respostas 3
Participantes 3