Algoritimo para calcular a idade da pessoa[resolvido]

15 respostas
J

Olá Pessoal!

Gostaria de um algoritimo que leia o nome de uma pessoa e sua data de nascimento. A partir da data atual, calcule a idade da pessoa.

Grato pela atenção, sem mais para o momento!

Jairo Dione

15 Respostas

J

Tenta isso:


J

Olá!

Estes links que vc enviou mostra o algoritmo com objetos, eu gostaria de desenvolver este algoritmo em java sem ser em objeto, pois é uma questão do livro Logica de programação e estrutura de dados com aplicação em Java 2ª Edição Sandra Puga, Gerson Rissetti

G

(Ano atual) menos (data de nascimento)

Acho que seria isso. ‘-’

J

Sim, o calculo pra tirar a idate é anoAtual-anoNascimento porem não entendi se ele realmente que apenas de forma comun como por exemplo aki:

import javax.swing.JOptionPane;


/**
 *
 * @author Joatan
 */
public class idade {
 
    public static void main(String[]args){
        
    int anoAtual = Integer.parseInt(JOptionPane.showInputDialog("Em que ano estamos?"));
    int anoNascimento = Integer.parseInt(JOptionPane.showInputDialog("Em que ano você nasceu?"));
    int idade = anoAtual-anoNascimento;
    JOptionPane.showMessageDialog(null,"Voce tem: "+idade+ " anos");
    
    }

existe todo um processo por traz , como tratamento dos Meses do aniversário , pegar o ano atual sem usar OO , só se você dizer em que ano estamos .

A

Não precisa solicitar o ano atual ao usuário. Basta pegar do sistema:

import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.Scanner;

public class TestGUJ {
    public static void main(String[] args) {
        Calendar cal = GregorianCalendar.getInstance();
        int anoAtual = cal.get(Calendar.YEAR);
        Scanner in = new Scanner(System.in);
        System.out.println("Ano em que você nasceu: ");
        int anoNasc = in.nextInt();
        System.out.println("Voce tem: " + (anoAtual - anoNasc) + " anos.");   
  }
}
J

Acredito que você não tenha lido o topico inteiro ^^
leia, veja os links que passei pra ele, veja oque ele disse ^^.

A
JoatanGuj:
Não precisa solicitar o ano atual ao usuário. Basta pegar do sistema:

Acredito que você não tenha lido o topico inteiro ^^
leia, veja os links que passei pra ele, veja oque ele disse ^^.

Li sim, tanto que vi você solicitando o ano atual em seu código.

JoatanGuj:
Sim, o calculo pra tirar a idate é anoAtual-anoNascimento porem não entendi se ele realmente que apenas de forma comun como por exemplo aki:
import javax.swing.JOptionPane;


/**
 *
 * @author Joatan
 */
public class idade {
 
    public static void main(String[]args){
        
    int anoAtual = Integer.parseInt(JOptionPane.showInputDialog("Em que ano estamos?"));
    int anoNascimento = Integer.parseInt(JOptionPane.showInputDialog("Em que ano você nasceu?"));
    int idade = anoAtual-anoNascimento;
    JOptionPane.showMessageDialog(null,"Voce tem: "+idade+ " anos");
    
    }

existe todo um processo por traz , como tratamento dos Meses do aniversário , pegar o ano atual sem usar OO , só se você dizer em que ano estamos .

J

Olá André e Joatan!

Estamos quase lá, mas o que acontece é que gostaria de pegar a data completa tipo “07/09/2011 esta data o sistema pega automaticamente, que seria a data atual” e pediriamos para o usuário digitar a data de nascimento, Ex.:“01/01/1901 esta seria a forma em que o usuario digitaria a data de nascimento”. Com isto o sistema calcula a idade, e não somente digitando o ano de nascimento e o ano atual, entenderam?

J

jairodione:
Olá André e Joatan!

Estamos quase lá, mas o que acontece é que gostaria de pegar a data completa tipo “07/09/2011 esta data o sistema pega automaticamente, que seria a data atual” e pediriamos para o usuário digitar a data de nascimento, Ex.:“01/01/1901 esta seria a forma em que o usuario digitaria a data de nascimento”. Com isto o sistema calcula a idade, e não somente digitando o ano de nascimento e o ano atual, entenderam?

olá, eu faria assim

// importar na classe
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.GregorianCalendar;
import java.math.BigDecimal;
import java.math.RoundingMode;


// metodo que retorna o intervalo de dias entre duas datas
   public String contaDias(String dataInicialBR, String dataFinalBR) throws ParseException {  
  
        DateFormat df = new SimpleDateFormat("dd/MM/yyyy");  
        df.setLenient(false);  
  
        Date dataInicio = df.parse(dataInicialBR);  
        Date dataFim = df.parse(dataFinalBR);  
        long dt = (dataFim.getTime() - dataInicio.getTime()) + 3600000;  
        Long diasCorridosAnoLong = (dt / 86400000L);  
  
        Integer diasDecorridosInt = Integer.valueOf(diasCorridosAnoLong.toString());  
  
        String diasDecorridos = String.valueOf(diasDecorridosInt); //Sem numeros formatados;  
  
        return diasDecorridos;  
  
    } 

// método para pegar a data do dia
    public  String getDataDiaBr(){
        GregorianCalendar calendario = new GregorianCalendar();
        int dia = calendario.get(calendario.DAY_OF_MONTH);
        int mes = calendario.get(calendario.MONTH) + 1;
        int ano = calendario.get(calendario.YEAR);
        String dataIguana = String.valueOf(dia + "/" + mes + "/" + ano);
        DateFormat df = new SimpleDateFormat("dd/MM/yyyy");
        String diaIguana = df.format(new Date());
        return diaIguana;
    }

// agora para calcular a idade
     public static BigDecimal calculaIdade(String dataDoMeuNascimento) throws ParseException{
        BigDecimal qtdDias = new BigDecimal(contaDias(dataDoMeuNascimento,getDataDiaBr()));
        BigDecimal ano = new BigDecimal(365.25);
        BigDecimal idade = qtdDias.divide(ano,0, RoundingMode.DOWN);
        
        return idade;        
    }


//**** para usar é só chamar o metodo calculaIdade e passar uma String com a data do nascimento 
 System.out.println(calculaIdade("06/09/1979"));
J

Eu disse que sem usar as classe ja existentes como Calendar fica bem dificil de se “pegar” a data atual do sistema.
pelo que eu tinha entendido ele não queria usar Objetos , porem agora que ele explicou eu pude , de fato , entender corretamente.

bye :smiley:

F

Sinceramente…
O interessante é você posta a sua dúvida e não o seu problema.
Porque do jeito que está PARECE que você não tentou e está encomendado o código.

G

Use String.split("/");

Você vai pegar a String com a data , e vai dar um Split pra cada barra, assim retornando um vetor de 3 posições;

String data = "10/10/10"; String [] dia_mes_ano = data.split("/");

J

Olá julianolandim!

Deu certo, muito obrigado!!!

J

jairodione:
Olá julianolandim!

Deu certo, muito obrigado!!!


Disponha, estamos aqui para ajudar :thumbup:

C

Galera consegui fazer um código muito simples e funciona perfeitamente, segue abaixo:

public int calculaIdade(String dt_nasc) {

// Data de hoje.

GregorianCalendar hoje = new GregorianCalendar();

int diah = hoje.get(Calendar.DAY_OF_MONTH);

int mesh = hoje.get(Calendar.MONTH) + 1;

int anoh = hoje.get(Calendar.YEAR);
// Data do nascimento.

int dian = Integer.valueOf(dt_nasc.substring(0,2));

int mesn = Integer.valueOf(dt_nasc.substring(3,5));

int anon = Integer.valueOf(dt_nasc.substring(6,10));

// Idade.
int idade;

if (mesn < mesh || (mesn == mesh && dian <= diah))

idade = anoh - anon;

else

idade = (anoh - anon)-1;

return (idade);
}

Criado 7 de setembro de 2011
Ultima resposta 27 de dez. de 2013
Respostas 15
Participantes 7