Algoritimo para calcular a idade da pessoa[resolvido]

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

Tenta isso:


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

(Ano atual) menos (data de nascimento)

Acho que seria isso. ‘-’

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:

[code]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”);

    }

    [/code]
    

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 .

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

[code]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.”);
}
}[/code]

1 curtida

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

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

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

[quote=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:

[code]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”);

    }

    [/code]
    

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 . [/quote]

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?

1 curtida

[quote=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?[/quote]

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"));

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:

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.

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("/");

Olá julianolandim!

Deu certo, muito obrigado!!!

[quote=jairodione]Olá julianolandim!

Deu certo, muito obrigado!!![/quote]
Disponha, estamos aqui para ajudar :thumbup:

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