Software Guru Conference & Expo 2014

conocer edad exacta

hola amigos del foro tengo un problemilla...
tengo que hacer una programa en netbeans que como datos de entrada yo pido el dia mes y año de naciemiento y yo le tengo que decir al usuario cual es su edad exacta... en años con meses y dias... me podrian ayudar porfavor...

aqui les dejo mi codigo a ver si le pegan una revisada y me ayudan cn los ajustes necesarios gracias.

package conoceredad;
import javax.swing.JOptionPane;

* se le pide al usurio la edad y el programa desplegará el año de nac.
* año= año de nacimiento.
* edad=la edad que se le solicita como dato de entrada al usuario.
* ingresar la edad y el programa le dira cual es su año de nacimiento.
*/
public class Main {

public static void main(String[] args){{
int dia=0;
int mes=0;
int año=0;
int edad=0;
int dias=0;
int meses=0;
int años=0;
dia=Integer.parseInt(JOptionPane.showInputDialog("porfavor digite dia de nac"));
meses=Integer.parseInt(JOptionPane.showInputDialog("porfavor digite mes de nac"));
año=Integer.parseInt(JOptionPane.showInputDialog("porfavor digite año de nac"));
dias=31-dia;
meses=12-meses;
años=2010-año;

JOptionPane.showMessageDialog(null,"su edad es "+años+"años con "+meses+"meses y "+dias+"dias");

System.exit(0);

}

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de ezamudio

GregorianCalendar y Date

Revisa esas dos clases de java.util y con eso puedes calcular la edad. Ah y con SimpleDateFormat para convertir lo que el usuario tecla en una fecha (por cierto, de verdad puedes tener una variable llamada año?):

Date birth = new SimpleDateFormat("dd/MM/yyyy", String.format("%02d/%02d/%04y", dia, mes, anio));
long diff = System.currentTimeMillis() - birth.getTime(); //milisegundos de vida
long sobra = diff % 86400000l;
diff -= sobra; //con esto ya tenemos puros dias
long dias = diff / 86400000l ; //estos son los dias en total que llevas de vida

Y de ahi te pones a hacer puras operaciones de aritmética para ver cuántos años llevas de vida. O puedes usar el GregorianCalendar para estar viendo las diferencias entre la fecha de hoy y la de nacimiento.

Imagen de OscarRyz

@ezamudio, si si se puede

@ezamudio, si si se puede pero tienes que compilar ( en algunas plataformas ) usando la opcion -encoding UTF-8
@iquirce Para mi se ve bien, salvo claro, que aún no da los datos correctos.

Piensa en lo siguiente.

Una persona tiene 1 año cumplido, solamente si el mes y el día de nacimiento YA pasaron no?

Ejemplo hoy es 19 julio 2010, y esta persona ( bebe ) nacio el 18 de julio del 2009, entonces tiene 1 año con 1 día.

Si su fecha de nacimiento es 20 de julio del 2009, entonces aún no tiene un año. Tiene solamente 11 meses y 29 dias ( suponiendo que el mes fuere ade 30 ) no?

Tu procedimiento entonces es correcto pero solo para quién nació el 1ro de enero. Para el resto, hay que restarle los meses y días correspondientes.

Entonces, lo que tienes que hacer es tomar un papel y lápiz ( digo, solamente por que es más fácil, escribirlo y borrarlo cuanto sea necesario ) y poner varios ejemplos.

Usa tu fecha de nacimiento, la de tu hermano, inventa varias, etc. algunas antes de la fecha actual otros después y escribe también que es lo que te debería salir.

Modifica tu ejemplo y pon las condiciones necesarias ( ejemplo, si el mes/dia no han pasado, restarle 1 año al resultado etc. ) Y prueba con tus datos de prueba.

Espero que esto te sirva.

Por cierto , recuerda escribir tu código en el foro con los tags: <code> tu código Java aquí </code> para que se vea mejor.

Y un comentario adicional, en Java puedes declarar la variable e inicializarla inmediatamente, entonces tu código

int dia=0;
int mes=0;
int año=0;

...
dia=Integer.parseInt(JOptionPane.showInputDialog("porfavor digite dia de nac"));
meses=Integer.parseInt(JOptionPane.showInputDialog("porfavor digite mes de nac"));
año=Integer.parseInt(JOptionPane.showInputDialog("porfavor digite año de nac"));

También lo puedes escribir como:

int dia=Integer.parseInt(JOptionPane.showInputDialog("porfavor digite dia de nac"));
int meses=Integer.parseInt(JOptionPane.showInputDialog("porfavor digite mes de nac"));
int año=Integer.parseInt(JOptionPane.showInputDialog("porfavor digite año de nac"));
Imagen de JaimeItlzc

Y donde quedo mes?

El aprovechar lineas de codigo es muy practico y comodo como lo comenta Oscar..
Realiza tu problema en forma comun antes que nada..

y checa tu codigo usa un poco de mas metodos para el calculo ezamudio los describe arriba son muy practicos y utilces..
Costa de pensarle un poco.

Saludos.

edad

me podrian ayudar a calcular la edad de una persona desde el comienzo